问题描述
我需要将三个列表合并成一个字典。这些列表来自于阅读我格式化的txt文件,这里是该文件的一段代码:
maker = ['Horsey' ,福特,陆地,斯克里普斯摊]
年= ['1899','1909','1911','1913年]
model = ['Horseless','Model T','OctoAuto','Bi-Autogo']
进入以下内容:
car_dict = {'Horsey':1899,'Horseless','Ford':1909,'Model T','Overland':1911,'OctoAuto','Scripps-Booth':1913,'Bi-Autogo'}
这是我做的:
def car_data_merge(car_maker,car_model,car_year):
car_dict = {}
car_merge = []
car_dict = defaultdict(partial(defaultdict,list))
for(car_maker,car_model,car_year) car_maker,car_model,car_year):
car_dict [car_year] [car_model] .append(car_maker)
print(car_dict)
当我输入这个我得到:
{'Horsey':defaultdict(< class'list'>,{'1899':['Horseless']})
/ pre>
并非所有列表中的数据都显示,我不希望显示
defaultdict
p>
当我尝试以下操作:
def car_data_merge(car_maker,car_data) :
car_dict = {}
car_merge = []
car_merge = zip(car_maker,car_data)
car_dict = dict(car_merge)
print(car_dict)
### car_data持有年份和型号####
只有部分数据显示:
'Horsey':'Horseless',':1909,'Model T
我该怎么办?
解决方案
您在
zip
正确的轨道上,但请注意:
如果你很好,你可以将你的数据压缩成一个元组列表,压缩键,并将所有东西都移到
dict )
。
如果要处理缺失的值,请检查
itertools
一个href =http://docs.python.org/2/library/itertools.html#itertools.izip_longest =noreferrer>izip_longest
(Python 2) 或其中
try:
#Pyt来自itertools的hon 2
import izip_longest
zip_longest = izip_longest
除了ImportError:
#Python 3
from itertools import zip_longest
from pprint import pprint
def main():
maker = ['Horsey','Ford','Overland','Scripps-Booth','FutureX','FutureY' ]
year = ['1899','1909','1911','1913','20xx']
model = ['Horseless','Model T','OctoAuto','Bi -Autogo']
car_data = dict(zip(maker,zip(year,model)))
car_data_longest = {mk:(yr,md)for mk,yr,md in zip_longest (制造商,年份,型号)}
pprint(car_data)
pprint(car_data_longest)
输出:
{'Ford':('1909','Model T'),
'Horsey':('1899','Horseless'),
'Overland':('1911','OctoAuto'),
'Scripps-Booth':('1913' 碧Autogo) }
{'Ford':('1909','Model T'),
'FutureX':('20xx',None),
'FutureY':(无,无) ,
'Horsey':('1899','Horseless'),
'Overland':('1911','OctoAuto'),
'Scripps-Booth' ','Bi-Autogo')}
I need to merge three lists into one dictionary. These lists are from reading a txt file I formatted, and here is a snippet from that file:
maker =['Horsey', 'Ford', 'Overland', 'Scripps-Booth'] year = ['1899', '1909', '1911', '1913'] model = ['Horseless', 'Model T', 'OctoAuto', 'Bi-Autogo']
Into the following:
car_dict = {'Horsey':1899,'Horseless','Ford':1909,'Model T','Overland' : 1911, 'OctoAuto', 'Scripps-Booth' : 1913, 'Bi-Autogo'}
Here is what I did:
def car_data_merge(car_maker,car_model,car_year): car_dict = {} car_merge = [] car_dict = defaultdict(partial(defaultdict,list)) for (car_maker,car_model,car_year) in zip(car_maker,car_model,car_year): car_dict[car_year][car_model].append(car_maker) print(car_dict)
When I enter this I get:
{'Horsey': defaultdict(<class 'list'>, {'1899': ['Horseless']})
Not all the data from list is shown and I don't want the
defaultdict
shown.When I tried the following:
def car_data_merge(car_maker,car_data): car_dict = {} car_merge = [] car_merge = zip(car_maker,car_data) car_dict = dict(car_merge) print(car_dict) ### car_data holds both year and model ####
Only part of the data shows up:
'Horsey':'Horseless',':1909,'Model T
What should I do?
解决方案You were on the right track with
zip
, but beware that:If you're fine with that, you can zip your data into a list of tuples, zip the keys, and hand everything off to
dict()
.If you'd like to handle missing values, checkout
itertools
izip_longest
(Python 2) orzip_longest
(Python 3) wheretry: # Python 2 from itertools import izip_longest zip_longest = izip_longest except ImportError: # Python 3 from itertools import zip_longest from pprint import pprint def main(): maker =['Horsey', 'Ford', 'Overland', 'Scripps-Booth', 'FutureX', 'FutureY'] year = ['1899', '1909', '1911', '1913', '20xx'] model = ['Horseless', 'Model T', 'OctoAuto', 'Bi-Autogo'] car_data = dict(zip(maker, zip(year, model))) car_data_longest = {mk: (yr, md) for mk, yr, md in zip_longest(maker, year, model)} pprint(car_data) pprint(car_data_longest)
Output:
{'Ford': ('1909', 'Model T'), 'Horsey': ('1899', 'Horseless'), 'Overland': ('1911', 'OctoAuto'), 'Scripps-Booth': ('1913', 'Bi-Autogo')} {'Ford': ('1909', 'Model T'), 'FutureX': ('20xx', None), 'FutureY': (None, None), 'Horsey': ('1899', 'Horseless'), 'Overland': ('1911', 'OctoAuto'), 'Scripps-Booth': ('1913', 'Bi-Autogo')}
这篇关于将三个列表合并成一个字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!