如何反向索引包含值列表的字典

时间:2019-09-30 10:05:38

标签: python dictionary

d = { "claims": [
              "Georg",
              "Bob",
              "Jeny",
              "John",
              "Catherin",
              "Tommen",
              "Linda",
              "Bran",
              "Sansa",
              "Ross",
              "Lyana",
              "Gilly",
              "Daario",
              "Sam",
              "Tyrion",
              "Peter",
              "Arya",
              "Sandra",
              "Catelyn"
            ],
     "names" : ["Lyana",
              "Gilly",
              "Daario",
              "Sam",
              "Tyrion",
              "Peter",
              "Arya",
              "Sandra",
              "Catelyn"]

          }

my_dict = {value: key for key in d for value in d[key]}
print(my_dict)

2 个答案:

答案 0 :(得分:0)

出于可读性考虑,我不建议在这种情况下使用dict理解。 dict方法'setdefault'是您要寻找的方法。

d = { "claims": [
              "Georg",
              "Bob",
              "Jeny",
              "John",
              "Catherin",
              "Tommen",
              "Linda",
              "Bran",
              "Sansa",
              "Ross",
              "Lyana",
              "Gilly",
              "Daario",
              "Sam",
              "Tyrion",
              "Peter",
              "Arya",
              "Sandra",
              "Catelyn"
            ],
     "names" : ["Lyana",
              "Gilly",
              "Daario",
              "Sam",
              "Tyrion",
              "Peter",
              "Arya",
              "Sandra",
              "Catelyn"]

          }

new_dict = {}
for k, v in d.items():
    for i in v:
        # return empty list if key not found, thereafter append 'names' or 'claims' to the returned value
        new_dict.setdefault(i, []).append(k)

答案 1 :(得分:0)

def invert_dict(d):
    inverse = dict() 
    for key in d:
       for item in d[key]:
            if item not in inverse: 
                inverse[item] = [key] 
            else: 
                inverse[item].append(key) 
    return inverse
invert_dict(d)