【问题标题】:Replace element from a list of values in a dictionnary by values from other dictionnary用另一个字典中的值替换字典中值列表中的元素
【发布时间】:2021-12-12 14:26:36
【问题描述】:

真的很抱歉,当你有项目要做时,在 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'})

非常感谢

【问题讨论】:

    标签: python list dictionary defaultdict


    【解决方案1】:

    使用以下dict comprehension

    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 中循环技术的一般介绍,请参阅documentation

    【讨论】:

      【解决方案2】:

      您可以迭代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 不应该存在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-13
        • 1970-01-01
        • 2021-03-11
        • 2021-06-15
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        相关资源
        最近更新 更多