簡體   English   中英

在Python中為列表的dict添加值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM