[英]Add values to dict of list in Python?
我有這種列表字典,最初是空的:
d = dict()
現在的用例是簡單地在鍵下添加一個值,該鍵可能是新鍵或現有鍵。 我想我們必須這樣做:
if key not in d:
d[key] = list()
d[key].append(value)
這看起來非常繁瑣且容易出錯,需要編寫多行(使用復制粘貼或輔助函數)。 有更方便的方式嗎?
如果沒有“只有一種方法可以做到這一點”,並且你知道它,你也可以回答這個問題,也許可以建議其他方法來完成上述工作,即使它們不一定更好。
我找了重復,沒找到,但也許我只是不知道使用正確的關鍵字。
你想要的是一個defaultdict,在集合庫中可用:
Python2.7: https ://docs.python.org/2/library/collections.html#defaultdict-examples
Python3.7: https ://docs.python.org/3/library/collections.html#collections.defaultdict
Example:
>>> from collections import defaultdict
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
... d[k].append(v)
...
>>> sorted(d.items())
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
d[key] = d.get(key, []) + [value]
解釋
d.get
方法的關鍵下返回值key
,並且如果不存在這樣的密鑰,則返回可選的參數(第二),在這種情況下[]
空列表)
那么你將獲得列表(空或不),而不是你添加列表[value]
。 這也可以通過.append(value)
而不是+ [value]
擁有該列表,您將其設置為該鍵的新值
例如
d = {1: [1, 2]}
d[1] = d.get(1, []) + [3]
# d == {1: [1, 2, 3]}
d[17] = d.get(17, []) + [8]
# d == {1: [1, 2, 3], 17: [8]}
d[key] = list() if (key not in d) else d[key].append(value)
使用三元運算符。 並且看起來有點干凈,但它仍然幾乎與您的場景完全相同。
我道歉,我之前沒想過並且使用過標准的三元運算符。 我將它們改為Python三元運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.