从词典列表中创建新词典

时间:2020-05-06 23:40:49

标签: python python-3.x

我有以下格式的词典列表

data = [
    {
    "Members": [
         "user11",
         "user12",
         "user13"
    ],
    "Group": "Group1"
    },
    {
    "Members": [
         "user11",
         "user21",
         "user22",
         "user23"
    ],
    "Group": "Group2"
    },
    {
    "Members": [
         "user11",
         "user22",
         "user31",
         "user32",
         "user33",
    ],
    "Group": "Group3"
    }]

我想返回一个字典,其中每个用户都是键,值是他们所属的所有组的列表。因此,对于上面的示例,此字典将是:

newdict = {
    "user11": ["Group1", "Group2", "Group3"]
    "user12": ["Group1"],
    "user13": ["Group1"],
    "user21": ["Group2"],
    "user22": ["Group2", "Group3"],
    "user23": ["Group2"],
    "user31": ["Group3"],
    "user32": ["Group3"],
    "user33": ["Group3"],
}

我最初的尝试是在嵌套循环中使用defaultdict,但这很慢(而且也没有返回我期望的结果)。这是尝试:

user_groups = defaultdict(list)
for user in users:
    for item in data:
        if user in item["Members"]:
            user_groups[user].append(item["Group"])

有人对提高速度有任何建议吗?这也是通常更好的方法吗?

1 个答案:

答案 0 :(得分:4)

代码

new_dict = {}
for d in data:   # each item is dictionary
  members = d["Members"]
  for m in members:
    # appending corresponding group for each member
    new_dict.setdefault(m, []).append(d["Group"])


print(new_dict)

退出

{'user11': ['Group1', 'Group2', 'Group3'],
 'user12': ['Group1'],
 'user13': ['Group1'],
 'user21': ['Group2'],
 'user22': ['Group2', 'Group3'],
 'user23': ['Group2'],
 'user31': ['Group3'],
 'user32': ['Group3'],
 'user33': ['Group3']}