python - 负面更新 Python 字典 [NOT "key"]

标签 python dictionary

我正在寻找一种通过寻址所有与给定键不匹配的键来更新/访问 Python 字典的方法。

也就是说,我想做一些类似dict[!key] 的事情,而不是通常的dict[key]。我找到了一个解决方法,但认为必须有一个我目前无法弄清楚的更好的方法。

# I have a dictionary of counts
dicti = {"male": 1, "female": 200, "other": 0}

# Problem: I encounter a record (cannot reproduce here) that 
# requires me to add 1 to every key in dicti that is NOT "male", 
# i.e. dicti["female"], and  dicti["other"], 
# and other keys I might add later

# Here is what I am doing and I don't like it
dicti.update({k: v + 1 for k,v in dicti.items() if k != "male"})

最佳答案

dicti.update({k: v + 1 for k,v in dicti.items() if k != "male"})

创建子字典(散列、内存开销)然后将其传递给旧字典:更多散列/引用副本。

为什么不在键上使用一个好的旧循环(因为值是不可变的):

for k in dicti:
   if k != "male":
       dicti[k] += 1

如果有很多键并且只有一个键要避免,可能会更快:添加到所有键,并取消对要避免的一个键的操作(节省大量字符串比较):

for k in dicti:
   dicti[k] += 1
dicti["male"] -= 1

如果值是可变的(例如:列表),我们将避免一次散列并改为改变值:

for k,v in dicti.items():
   if k != "male":
       v.append("something")

单行代码很酷,但有时最好避免使用它们(在这种情况下的性能和可读性)

关于python - 负面更新 Python 字典 [NOT "key"],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49283510/

相关文章:

python - numpy argmax 如何工作?

c# - 使用 csvhelper 进行映射/写入协助

python - 用不同数量的字典保存嵌套字典

python - 类型错误:字符串索引必须是整数//在 python 中使用 JSON 作为 dict

python - django 在生产环境中,urls.py 仅匹配空路径,即 ""而没有其他?

Python 素数代码在 spoj 上给出运行时错误(NZEC)

python - 如何使用 Python 将列表组成的值与字典中的常见项组合起来?

java - 将 dict 的 dict 转换为 json

python - 将 Pandas DataFrame 写入 MySQL 数据库

python - 如果文本大于列宽,tkinter 将自动换行