簡體   English   中英

如何在兩個詞典中映射相同的項目並生成其相應鍵的值列表

[英]How to map identical items in two dictionaries and produce a list of values of their corresponding keys

我的目標是將小字典映射到大字典並返回大字典中的值列表,該字典帶有小字典的相應鍵。

x={'red':0.25, 'yellow':0.05, 'pink':0.35, 'brown':0.22, 'blue':0.13}
y={'red':2, 'blue':3, 'yellow':1}

我的代碼不斷給我一個大字典的完整值列表。

for b in x.keys():
    if b in y.keys():
        k=y.values()
print k

output: [0.35, 0.22, 0.13, 0.05, 0.25]

Desired output:
[0.25,0.13,0.05]

有什么建議么? 謝謝。

像這樣的東西? 我認為訂單無關緊要,因為這些是字典。 此外,假設您似乎在迭代x.keys() ,那么, y中可能存在一些x中不存在的值,並且您不希望它們映射。

>>> x={'red':0.25, 'yellow':0.05, 'pink':0.35, 'brown':0.22, 'blue':0.13}
>>> y={'red':2, 'blue':3, 'yellow':1}
>>> [val for elem, val in x.items() if elem in y]
[0.13, 0.05, 0.25]

如果y中沒有不在x ,那么您可以簡單地遍歷y字典。

>>> [x[key] for key in y]
[0.13, 0.05, 0.25]

PS - 代碼中的問題是,每次找到匹配項時,都會將整個y.values()列表分配給k ,從而最終得到一個完整的值列表。 你可以修改你的代碼看起來像這樣

>>> k = []
>>> for b in x.keys():
    if b in y.keys():
        k.append(x[b])


>>> k
[0.13, 0.05, 0.25]

雖然,迭代字典會給出類似的結果,如下所示

>>> for b in x:
    if b in y:
        k.append(x[b])


>>> k
[0.13, 0.05, 0.25]
k = [x[key] for key in y.keys()]

您的代碼的問題是,您將y.values()分配給k 所以你的k只不過是dict y的值列表。 您可以像這樣修改代碼以使其工作:

k = []
for b in x.keys():
    if b in y.keys():
        k.append(x[b])
print k

您還可以使用列表理解:

>>> x={'red':0.25, 'yellow':0.05, 'pink':0.35, 'brown':0.22, 'blue':0.13}
>>> y={'red':2, 'blue':3, 'yellow':1}

>>> [x[key] for key in y]
[0.13, 0.05, 0.25]

我會將此視為兩組的交集,然后傳遞子集以映射所有相應的值。 這樣,它比列表理解更容易理解。

>>> map(x.get, set(x) & set(y))
>>> [0.13, 0.05, 0.25]

當然,你可以對列表理解做同樣的事情:

>>> [x.get(i) for i in set(x) & set(y)]
>>> [0.13, 0.05, 0.25]

暫無
暫無

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

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