本文介绍了将三个列表合并成一个字典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将三个列表合并成一个字典。这些列表来自于阅读我格式化的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) or zip_longest (Python 3) where

try:
    # 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')}

这篇关于将三个列表合并成一个字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-05 10:00
查看更多