簡體   English   中英

根據指定的字典值對字典元素進行分組

[英]Group dict elements based on a specified dict value

我有這個數據:

data = 
{
   "a":{
      "00066554466":{
         "Id":650,
         "Passwd":"e1c2a06545de9164d7e87cd98bed57c5",
         "zone":"Europe/Zurich"
      },
      "8745212300":{
         "Id":400,
         "Passwd":"ecb95502daace7f46bf12b484d086e5b",
         "zone":"Europe/Zurich"
      },
      "8745212301":{
         "Id":401,
         "Passwd":"ecb95502daace7f46bf12b484d086e5b",
         "zone":"Europe/Zurich"
      },
      "8745212302":{
         "DevId":402,
         "Passwd":"ecb95502daace7f46bf12b484d086e5b",
         "zone":"Europe/Zurich"
      }
   }
}

我想用相同的密碼對密鑰進行分組。 所以結果應該像下面這樣。

{
   "e1c2a06545de9164d7e87cd98bed57c5":[
      "00066554466"
   ],
   "ecb95502daace7f46bf12b484d086e5b":[
      "8745212300",
      "8745212301",
      "8745212302"
   ]
}

我嘗試使用 itertools.groupby 和for k,v in xxx ,但結果永遠不是我需要的。

itertools.groupby在數據已經按照要按連續順序分組的值進行排序時運行良好,但您的數據可能並非總是如此。

而是使用dict.setdefault和嵌套循環:

out = {}

for d1 in data.values():
    for k, d2 in d1.items():
        out.setdefault(d2['Passwd'], []).append(k)

print(out)

帶有defaultdict的變體:

from collections import defaultdict

out = defaultdict(list)

for d1 in data.values():
    for k, d2 in d1.items():
        out[d2['Passwd']].append(k)

print(dict(out))

Output:

{'e1c2a06545de9164d7e87cd98bed57c5': ['00066554466'],
 'ecb95502daace7f46bf12b484d086e5b': ['8745212300', '8745212301', '8745212302']}

一種解決方案,但可能不是 pythonic 只是為了:

passwd_group = {}

for k, val in data["a"]:

    if val["Passwd"] not in passwd_group:
        passwd_group[val["Passwd"]] = []

    passwd_group.append(k)
    

這可能不理想,但可以正常工作。

new_dict = {}
for L in data.keys():
    x = data[L]
    for M in x.keys():
        y = x[M]
        for N in y.keys():
            if N == "Passwd":
                new_list = new_dict.get(y[N], [])
                new_list.append(M)
                new_dict[y[N]] = new_list
print(new_dict)

暫無
暫無

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

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