社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

停止这样使用 Python 字典!

数据STUDIO • 1 月前 • 44 次点击  


如果你是个初学者,或者写代码有一段时间了,需要好好看一下你是否也会一样,像接下来的文章一样,错误使用 Python 字典。如果你也是一个资深玩家,可以一起探讨!~

不瞒你说,就连我也……但我从错误中吸取了教训,并改正了。所以今天特地总结了几个常见错误,也来阻止你。

错误#1

检查密钥是否存在的错误方法

有时人们会这样做来检查密钥是否存在:

my_dict = {"name""Kiran""age": 24}
if "name" in my_dict:
    print(my_dict["name"])
else:
    print("No name found")

我知道这可行……但我觉得没必要。我们可以用更好的方法来做这件事。

我们可以使用.get()

my_dict = {"name""Kiran""age": 24}
print(my_dict.get("name""No name found"))

现在,我们的代码看起来更简洁了。我们不需要额外的 if-else 检查。

错误 #2

我们曾经错误地循环遍历键和值

许多人习惯用这样的循环:

my_dict = {"a": 1, "b": 2, "c": 3}
for key in my_dict:
    print(key, my_dict[key])   

我知道……这个方法可行。但我们可以用更好的方法。我们可以用.items()这个来代替。

for key, value in my_dict.items():
    print(key, value) 

现在...如果我们进行一些字典查找,这将更具可读性并且更快。

错误#3

有时我们使用的update()方式是错误的

有些初学者是这样合并词典的:

dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
dict1.update(dict2)
print(dict1)

这肯定会起作用......但它会 修改 dict1。

除此之外,我们可以使用字典解包

dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
new_dict = {**dict1, **dict2}
print(new_dict)  # {'a': 1, 'b': 3, 'c': 4}

这将创建一个新的词典。它更安全,因为不会对原始词典造成意外修改

错误#4

我们可以defaultdict在不需要的时候使用它

有时...人们过度使用defaultdict

例如:

from collections import defaultdict
my_dict = defaultdict(int)
my_dict["a"] += 1   # 有效,但有必要吗?

我知道……这可行。但是……这真的有必要吗?我们可以使用更好的方法,例如:

my_dict = {}
my_dict["a"] = my_dict.get("a", 0) + 1

这将使我们的代码保持简单并避免任何不必要的导入。

我们应该只在真正需要的时候使用defaultdict它,比如在对值进行分组时。

错误#5

我们总是忽略字典性能

我知道……字典很快。但是当我们的字典变得太大时,它的性能就会下降。

最好不要这样写:

my_dict = {i: i**2 for i in range(10_000_000)}  

我们可以使用生成器表达式来节省内存:

def squared_numbers():
    for i in range(10_000_000):
        yield i, i**2

my_dict = dict(squared_numbers())

它将降低我们的内存使用量,并在我们真正需要时计算值。

错误#6

我们使用setdefault()错误的方式

你知道……初学者经常犯这个错误:

data = {}
if "name" not in data:
    data["name"] = "kiran"

我知道……这可行。但我们有更好的方法:

data = {}
data.setdefault("name""kiran")

这很清楚,我们不需要额外的if检查。但是这段代码有一个问题。

setdefault()总是会返回该值,即使它存在,正如我们在这段代码中看到的那样:

name = data.setdefault("name", some_expensive_function())

"name"已经存在,data但 Python 仍会调用some_expensive_function()这会浪费时间。

所以最好的方法是使用.get()

name = data.get("name""kiran")

如果缺少键,此方法只会调用默认值。非常简单……

错误 #7

有些人不使用Counter计数

通常……许多初学者会尝试像这样手动计算物品:




    
words = ["apple""banana""apple"]
word_count = {}
for word in words:
    word_count[word] = word_count.get(word, 0) + 1

我知道……这行得通。但我想——我们可以做得更好。我们可以使用collections.Counter

from collections import Counter
word_count = Counter(words)

现在,我们的代码更加清晰、更快。

如果你在写代码过程中也遇到这样的问题,或者其他比较有意思的问题,欢迎讨论。


🏴‍☠️宝藏级🏴‍☠️ 原创公众号『数据STUDIO』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括可戳👉 PythonMySQL数据分析数据可视化机器学习与数据挖掘 爬虫 等,从入门到进阶!

长按👇关注- 数据STUDIO -设为星标,干货速递

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/181908
 
44 次点击