[英]Split list of dictionaries with identical keys but different values to different dictionaries
[英]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.