簡體   English   中英

如何將具有多個文本列表值的python字典拆分為具有相同值的鍵的單獨字典?

[英]How can I split a python dictionary with multiple text-list values to have separate dictionaries of keys that have the same values?

我有一本字典,其中有整數作為鍵,而列表則作為值。 這里顯示一個小預覽。

{85992: ['teardrop', 'list2015'], 86107: ['teardrop', 'list2015'], 82364: ['macron', 'paris', 'palace'], 516253: ['liberia', 'vietnam'], 746235: ['democratic', 'national'], 861073: ['macron', 'paris', 'palace']}

我想在相同的詞典中輸出具有相同列表值的鍵,以便為每個單獨的值集繪制一個CSV文件,將具有相似值的鍵歸類。 我的清單很大,所以我無法定義字典名稱,因為我不知道會有多少個字典名稱。

我設法使用熊貓對字典進行排序,以輸出基於文本的排序列表,但我無法使用熊貓對其進行拆分。

import pandas as pd

data_file = pd.DataFrame(key_dict).transpose().reset_index()
data_file.columns = ['name_id' , 'text']
data_file.groupby('text')
data_file.set_index('name_id', inplace = True)
data_file.to_csv('key_dict.csv')

我想到了選項B,其中包含以其唯一的字典值(文本列表)命名的鍵列表。 但是,我的首選選擇是拆分字典。

您可以將collections.defaultdict用於O( n )解決方案,記住使用tuple鍵,因為list不可散列:

from collections import defaultdict

d = {85992: ['teardrop', 'list2015'], 86107: ['teardrop', 'list2015'],
     82364: ['macron', 'paris', 'palace'], 516253: ['liberia', 'vietnam'],
     746235: ['democratic', 'national'], 861073: ['macron', 'paris', 'palace']}

dd = defaultdict(list)

for k, v in d.items():
    dd[tuple(v)].append(k)

print(dd)

defaultdict(list,
            {('democratic', 'national'): [746235],
             ('liberia', 'vietnam'): [516253],
             ('macron', 'paris', 'palace'): [82364, 861073],
             ('teardrop', 'list2015'): [85992, 86107]})

為每組值繪制一個CSV文件

對於問題的這一部分,只需迭代defaultdict

for k, v in dd.items():
    df = pd.DataFrame(v)
    df.to_csv('_'.join(k) + '.csv', index=False)

使用map

輸入

from collections import defaultdict
key_dict={85992: ['teardrop', 'list2015'], 86107: ['teardrop', 'list2015'], 82364: ['macron', 'paris', 'palace'], 516253: ['liberia', 'vietnam'], 746235: ['democratic', 'national'], 861073: ['macron', 'paris', 'palace']}
d = {}
d = defaultdict(lambda: [], d)
counts = map(lambda x: d[tuple(key_dict[x])].append(x) , key_dict.keys())
print(d['macron', 'paris', 'palace'])
d

產量

[861073, 82364]
defaultdict(<function __main__.<lambda>>,
            {('democratic', 'national'): [746235],
             ('liberia', 'vietnam'): [516253],
             ('macron', 'paris', 'palace'): [861073, 82364],
             ('teardrop', 'list2015'): [85992, 86107]})

暫無
暫無

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

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