嗨我有两个清单,
list1
['PO', 'NA', 'PO']
list2
['Post Office', 'Not Available', 'Post area']
我试图使用这两个列表来获取字典
我试过了,my_dict=dict(zip(list1,list2))
它给了,
{'NA': 'Not Available', 'PO': 'Post area'}
但我的预期输出是,
{'NA': 'Not Available', 'PO': ['Post area','Post Office']}
请帮助
答案 0 :(得分:3)
您可以使用dict
定义自己的自定义dict类class ListDict(dict):
def __init__(self, d={}):
if isinstance(d, zip):
for i, v in enumerate(d):
self.__setattr__(v[0], v[1])
else:
self.update(d)
def __setattr__(self, key, val):
if key in self:
if not isinstance(self[key], list):
self[key] = [self[key]]
self[key].append(val)
else:
self[key] = val
list1 = ['PO', 'NA', 'PO']
list2 = ['Post Office', 'Not Available', 'Post area']
my_dict = ListDict(zip(list1, list2))
print(my_dict)
输出:
{'PO': ['Post Office', 'Post area'], 'NA': 'Not Available'}
答案 1 :(得分:1)
有两种方法:
使用defaultdict的第一种方法:
from collections import defaultdict
list1=['PO', 'NA', 'PO']
list2=['Post Office', 'Not Available', 'Post area']
final_dict = defaultdict(list)
[final_dict[item[0]].append(item[1]) for item in zip(list1,list2)]
print(final_dict)
输出:
defaultdict(<class 'list'>, {'PO': ['Post Office', 'Post area'], 'NA': ['Not Available']})
第二种方法:
让我们分两步解决您的问题:
首先压缩两个列表:
list1=['PO', 'NA', 'PO']
list2=['Post Office', 'Not Available', 'Post area']
zip_list=[item for item in zip(list1,list2)]
现在检查zip tuple first element是否在dict中,如果是的话 使用这个很棒的模式:
final_dict={}
for item in zip_list:
if item[0] not in final_dict:
final_dict[item[0]]=[item[1]]
else:
final_dict[item[0]].append(item[1])
完整代码:
list1=['PO', 'NA', 'PO']
list2=['Post Office', 'Not Available', 'Post area']
zip_list=[item for item in zip(list1,list2)]
final_dict={}
for item in zip_list:
if item[0] not in final_dict:
final_dict[item[0]]=[item[1]]
else:
final_dict[item[0]].append(item[1])
print(final_dict)
输出:
{'NA': ['Not Available'], 'PO': ['Post Office', 'Post area']}
答案 2 :(得分:1)
这可能不是您想要的,因为它为您提供单个缩写的列表,但它提供的输出与您正在寻找的输出非常相似。 我希望它有所帮助。
list1 = ['PO', 'NA', 'PO']
list2 = ['Post Office', 'Not Available', 'Post area']
my_dict = {}
for abbrev,value in zip(list1,list2):
if abbrev in my_dict.keys():
my_dict[abbrev] += [value]
else:
my_dict[abbrev] = [value]
编辑:为了完整起见,下面的代码不会为单个项目创建列表,并且可以使用包含多个匹配项的大型项目列表正常运行。
list1 = ['PO', 'NA', 'PO']
list2 = ['Post Office', 'Not Available', 'Post area']
my_dict = {}
for abbrev,value in zip(list1,list2):
if abbrev in my_dict.keys():
if isinstance(my_dict[abbrev],str):
my_dict[abbrev] = [my_dict[abbrev]]
my_dict[abbrev] += [value]
else:
my_dict[abbrev] = value
print(my_dict)
答案 3 :(得分:1)
list1 = ['PO', 'NA', 'PO']
list2 = ['Post Office', 'Not Available', 'Post area']
my_dict = dict()
for key,value in zip(list1,list2):
if key not in my_dict:
my_dict[key] = value
else:
my_dict[key] = [my_dict[key]]
my_dict[key].append(value)
print(my_dict)
答案 4 :(得分:0)
我认为它对你也很有用。
list1 = ['PO', 'NA', 'PO', 'TCS', 'TCS']
list2 = ['Post Office', 'Not Available', 'Post area', 'Track Complaint Status', 'Tata Consultancy Service', 'Tata Consultancy Service']
output_dict = {}
for index, value in enumerate(list1):
if not value in output_dict:
output_dict.update({value:list2[index]})
else:
temp_list = [list2[index]]
temp_list.append(output_dict[value])
output_dict.update({value:temp_list})
print(output_dict)
输出: - {&#39; NA&#39;:&#39;不可用&#39;,&#39; PO&#39;:[&#39;发布区域&# 39;,&#39; Post Office&#39;],&#39; TCS&#39;:[&#39; Tata Consultancy Service&#39;,&#39; Tata Consultancy Service&#39;]}
在此程序中,无论list2中的重复值和长度也是如此。您可以根据确切的问题修改此代码。