【问题标题】:Add values to an existing list inside a dictionary based on matching items from another dictionary根据来自另一个字典的匹配项将值添加到字典内的现有列表
【发布时间】:2021-10-21 22:55:46
【问题描述】:

我正在努力将第二个字典中的值合并到第一个字典中。

最初的字典是:

dictionary1 = {u'user1': [[u'N/A', u'N/A', u'N/A', u'N/A', u'N/A', u'N/A', u'N/A']],
                     u'user2': [[504, u'user2 Windows', u'date', u'date', u'20', u'', u'1']],
                     u'user3': [[511, u'user3 phone', u'date1', u'date2', u'name', u'1', u'E'],
                                   [125, u'user3 phone',u'date1', u'date2', u'name', u'', u'8'],
                                   [854, u'user3 phone', u'date1', u'date2', u'name', u'1', u'3'],
                                   [890, u'user3 Windows', u'date1', u'date2', u'name', u'', u'4'],
                                   [506, u'user3 Windows', u'date1', u'date2', u'name', u'', u'7'],
                                   [454, u'user3 Windows', u'date1', u'date2', u'name', u'', u'E']]}


dictionary2 = {u'user1': [[u'N/A', u'N/A']],
                      u'user2': [[504, u'to_add']],
                      u'user3': [[890, u'to_add'],
                                    [506, u'to_add'],
                                    [454, u'to_add']]}

匹配值:用户 2 为 504,用户 3 为 890、506 和 454。我需要输出为:

dictionary1 = {u'user1': [[u'N/A', u'N/A', u'N/A', u'N/A', u'N/A', u'N/A', u'N/A', u'N/A']],
                     u'user2': [[504, u'user2 Windows', u'date', u'date', u'20', u'', u'1', u'to_add']],
                     u'user3': [[511, u'user3 phone', u'date1', u'date2', u'name', u'1', u'E'],
                                   [125, u'user3 phone',u'date1', u'date2', u'name', u'', u'8'],
                                   [854, u'user3 phone', u'date1', u'date2', u'name', u'1', u'3'],
                                   [890, u'user3 Windows', u'date1', u'date2', u'name', u'', u'4', u'to_add'],
                                   [506, u'user3 Windows', u'date1', u'date2', u'name', u'', u'7', u'to_add'],
                                   [454, u'user3 Windows', u'date1', u'date2', u'name', u'', u'E', u'to_add']]}

我尝试了多种方法来检查和匹配,但我不知所措。这是我卡住的地方:

inter1 = []
for user1 in dictionary2:
    for details1 in dictionary2[user1]:
        inter1.append(details1[0])
        inter1.append(details1[1])
print inter1

a = [[details1[1] for details1 in dictionary2[user1]] for user1 in dictionary2]

inter2 = {}
for user2 in dictionary1:
    for details2 in dictionary1[user2]:
        if details2[0] in inter1:
            print user2, details2[2], details2[3], details2[4], details2[5], details2[6]
            inter2[user2] = [details2[2], details2[3], details2[4], details2[5], details2[6], inter1]

但是这种方式只是将整个列表添加到每个列表的末尾...:(

【问题讨论】:

    标签: python list python-2.7 dictionary


    【解决方案1】:

    您可以使用items() 方法遍历字典:

    for k, v in dictionary2.items():
        print(k, v)
    >>>user1 [['N/A', 'N/A']]
    >>>user2 [[504, 'to_add']]
    >>>user3 [[890, 'to_add'], [506, 'to_add'], [454, 'to_add']]
    

    这应该对你有很大帮助

    第二:你把事情复杂化了。只想修改字典1,为什么还要创建中间字典?

    for k,v in dictionary2.items():
        for lst in v:
            for lst2 in dictionary1[k]:
                if lst[0] == lst2[0]:
                    lst2 += lst[1:]
    

    【讨论】:

      【解决方案2】:

      我已经做到了 - 在这里发布其他需要一些想法的人。这不是最漂亮的,但它确实有效:

      interm = {}
      for user in dictionary1:
          if dictionary2[user]:
              interm[user] = []
              for element in dictionary1[user]:
                  for element2 in dictionary2[user]:
                      if str(element[0]) == str(element2[0]):
                          l = []
                          l.append(element[0])
                          l.append(element2[1])
                          interm[user].append(l)
      
      for user in dictionary1:
          if interm[user]:
              for element3 in dictionary1[user]:
                  for element4 in interm[user]:
                      if str(element3[0]) == str(element4[0]):
                          element3.append(element4[1])
      

      输出变为:

      dictionary1 = {u'user3': [
          [511, u'user3 phone', u'date1', u'date2', u'name', u'1', u'E'],
          [125, u'user3 phone',u'date1', u'date2', u'name', u'', u'8'],
          [854, u'user3 phone', u'date1', u'date2', u'name', u'1', u'3'],
          [890, u'user3 Windows', u'date1', u'date2', u'name', u'', u'4', u'to_add'],
          [506, u'user3 Windows', u'date1', u'date2', u'name', u'', u'7', u'to_add'],
          [454, u'user3 Windows', u'date1', u'date2', u'name', u'', u'E', u'to_add']],
          u'user2': [
              [504, u'user2 Windows', u'date', u'date', u'20', u'', u'1', u'to_add']],
          u'user1': [[u'N/A', u'N/A', u'N/A', u'N/A', u'N/A', u'N/A', u'N/A', u'N/A']]}
      

      【讨论】:

        猜你喜欢
        • 2019-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-21
        • 1970-01-01
        • 2018-08-27
        相关资源
        最近更新 更多