簡體   English   中英

用其他字典中的值替換字典中值列表中的元素

[英]Replace element from a list of values in a dictionnary by values from other dictionnary

我真的很抱歉,當你有項目要做時,在 python 中成為一個菜鳥是很困難的......這是我的問題

d= { 'a': [ '"123728"', '"102359"', '"110663"', '"110664"','"110665"', '"110666"', '"110667"', '"110668"', '"110669"', '"110670"', '"110671"', '"110672"', '"115663"', '"115664"', '"115665"', '"122330"', '"122351"', '"110673"', '"120433"', '"121831"'], 

    'b': ['"100016"', '"101424"', '"101948"', '"102832"', '"108834"', '"110397"', '"110622"', '"110679"', '"110680"', '"110681"', '"110682"', '"116693"', '"123331"', '"102359"', '"110683"', '"115666"', '"115667"', '"124098"', '"125243"', '"140965"', '"121002"']}

來自 dict d 的值是來自 d1 的鍵

d1= {'"110674"': '"Apple"', '"110682"': "Banana", '"123331"': "Melon", '"110397"': "Orange"} # correspondance

我想要的是將 d 中的值替換為 d1 中的對應值並刪除不對應的值

d3= { 'a': "", 'b': ["Banana", "Melon", "Orange"]}

這是我的代碼

for key, value in d.items():
   for key2, value2 in d1.items():
      for elem in value:
         print(key2)
         if elem == key2:
            full_dict[key] = value2
pprint.pprint(full_dict)

但我有這個結果

defaultdict(None, {'b': 'Orange'})

非常感謝

使用以下字典理解

d3 = { key : [d1[v] for v in value if v in d1] for key, value in d.items() }
print(d3)

輸出

{'a': [], 'b': ['Orange', 'Banana', 'Melon']}

上面的等價於下面的 for 循環:

d3 = {}
for key, value in d.items():
    d3[key] = [d1[v] for v in value if v in d1]

如果要匹配確切的輸出(即空字符串代替空列表),請使用:

d3 = {}
for key, value in d.items():
    res = [d1[v] for v in value if v in d1]
    d3[key] = res if res else ""
print(d3)

輸出

{'a': '', 'b': ['Orange', 'Banana', 'Melon']}

有關 Python 中循環技術的一般介紹,請參閱文檔

您可以迭代d字典,然后對於每個鍵,迭代字典d1並檢查第二個字典的鍵是否存在於第一個字典的值中,然后將其添加到結果字典中。

result = {}
for k,v in d.items():
    temp = []
    for key,val in d1.items():
        if key in v:
            temp.append(val)
    result[k] = temp if temp else ''
    
result
{'a': '', 'b': ['Banana', 'Melon', 'Orange']}

PS:您的預期輸出與給定數據不匹配, Apple不應該在那里。

暫無
暫無

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

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