将三个列表合并到一个字典中

2024-04-24

我需要将三个列表合并到一本字典中。这些列表来自读取我格式化的 txt 文件,以下是该文件的片段:

maker =['Horsey', 'Ford', 'Overland', 'Scripps-Booth']

year = ['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) in zip(car_maker,car_model,car_year):
         car_dict[car_year][car_model].append(car_maker)
    print(car_dict)

当我输入这个时,我得到:

{'Horsey': defaultdict(<class 'list'>, {'1899': ['Horseless']})

未显示列表中的所有数据,我不希望defaultdict shown.

当我尝试以下操作时:

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   ####

仅显示部分数据:

'Horsey':'Horseless',':1909,'Model T

我应该怎么办?


你走在正确的轨道上zip,但要注意:

返回的列表的长度被截断为最短参数序列的长度。 http://docs.python.org/2/library/functions.html#zip

如果您对此感到满意,您可以将数据压缩到元组列表中,压缩密钥,然后将所有内容交给dict().

如果您想处理缺失值,请结账itertools izip_longest(Python 2) http://docs.python.org/2/library/itertools.html#itertools.izip_longest or zip_longest(Python 3) http://docs.python.org/3/library/itertools.html#itertools.zip_longest where

如果可迭代的长度不均匀,则缺失值将被填充填充值. http://docs.python.org/2/library/itertools.html#itertools.izip_longest

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')}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将三个列表合并到一个字典中 的相关文章

随机推荐