我正在寻找一种通过寻址所有与给定键不匹配的键来更新/访问 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/