簡體   English   中英

使用理解創建包含列表值的字典

[英]creating dictionary containing list values using a comprehension

在python中,我希望使用具有字符串的鍵和作為列表的值的理解來創建字典。 我無法弄清楚的是,如何將元素附加到這些列表中。 例如,考慮我的以下嘗試:

{c: [].append(x[0]) for x in g16.nodes(data=True) for c in colors if x[1]['color'] == c}

g16.nodes(data = True)給出一個對列表,其中第一個元素是一個字符串,第二個元素是一個只指定顏色的字典。 如上所述,我希望將這個結構變成一個字典,其中鍵給出顏色,值是具有這種顏色的字符串列表。

如果您有解決方案,或者有更好的方法,請告訴我!

謝謝你的幫助。

你正試圖這樣做:

{c: [x[0] for x in g16.nodes(data=True) if x[1]['color'] == c] for c in colors}

但它並不是非常有效,因為你為每種顏色循環g16.nodes(data=True)一次

這樣的事情會更好

d = {c: [] for c in colors}
for x in g16.nodes(data=True):
    k = x[1]['color']
    if k in d:
        d[k].append(x[0])

如果你知道k總是用colors ,你可以簡化為

d = {c: [] for c in colors}
for x in g16.nodes(data=True):
    d[x[1]['color']].append(x[0])

使用對列表鍵的字典的理解並不是很好。 如果您可以嘗試這樣做可能會更容易:

假設g16.nodes(data=True)就像

[('key1', {'color': 'black'}), ('key2', {'color': 'green')]

並且color鍵存在,你可以試試這個:

from collections import defaultdict
gen = ((k, c['color']) for k, c in g16.nodes(data=True) if c['color'] in colors)
results = defaultdict(list)
for key, color in gen:
    results[color].append(key)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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