0

我昨天问了这个问题

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

第一个答案是我需要的最正确的

但重新审视我的 automobile.txt file,我意识到了两件事。

  1. 它在列表中有多家汽车制造商,并且每家都只列出了一家

  2. 每个数据似乎都是不合适的,但只有少数。

我很近,但很远。

这是我所拥有的

注意是否有所不同这是从.txt我附加的文件中读取的,并将数据拆分为三个列表。我知道数据在那里。我检查了。

from pprint import pprint
import string
import re

data_file = open("Automobil.txt", 'r')
try:
    from itertools import izip_longest
    zip_longest = izip_longest
except ImportError:
    from itertools import zip_longest

def formatting_list(data_file):
    year = []
    maker = []
    model = []
    for line in data_file:
        maker = (' '.join(line.split()[1:2]))
        year =  (' '.join(line.split()[0:1]))
        model = ((' '.join(line.split()[2:])))
    return maker,year,model

def car_data_merge(maker,year,model):
#This was the one suggested to me that I liked

     car_dict_longest = {mk: (yr, md) for mk, yr, md in zip_longest(maker,year,model)}
     pprint(car_dict_longest)

这类似于我尝试过的其他人在另一页上向我展示的内容

  car_dict = {maker: (year, model) for maker, model, year in zip(car_maker,car_model,car_year)}
  print(car_dict)

在阅读了它的用途izip以及它与zip

我认为 izip 将所有内容都保留在原处,而不是临时元组。

.txt这是我认为问题所在列表的一小部分:

year = [1958,1909,1958,1958, 1961, 1961]

maker = [Ford,Ford,Lotus,MGA, Amphicar, Corvair]

model = [Edsel,Model T,Elite,Twin Cam]

当运行这是应该发生的事情

Ford: {1958 , Edsel}, Ford: {1909, Model T}, Lotus: {1958, Elite}, MGA :{1958, Twin Cam}, Amphicar:{1961}, Corvair:{1961}

相反,我得到类似的东西:

Ford: {1958 , Edsel}, Lotus: {1958, MGA}, Amphicar:{1961, Corvair}

任何帮助或指导将不胜感激。

4

1 回答 1

1

推荐

你可以做一个元组列表的字典。Defaultdict是你的朋友。

代码

from collections import defaultdict

year = [1958, 1909, 1958, 1958, 1961, 1961]
maker = ['Ford', 'Ford', 'Lotus', 'MGA', 'Amphicar', 'Corvair']
model = ['Edsel', 'Model T', 'Elite', 'Twin Cam', '', '']

d = defaultdict(list)
for maker, model, year in zip(maker, model, year):
    d[maker].append((model, year))

结果

>>> from collections import defaultdict
>>> 
>>> year = [1958, 1909, 1958, 1958, 1961, 1961]
>>> maker = ['Ford','Ford','Lotus','MGA', 'Amphicar', 'Corvair']
>>> model = ['Edsel', 'Model T', 'Elite', 'Twin Cam', "", ""]
>>> 
>>> d = defaultdict(list)
>>> for maker, model, year in zip(maker, model, year):
...     d[maker].append((model, year))
... 
>>> from pprint import pprint
>>> pprint(dict(d))
{'Amphicar': [('', 1961)],
 'Corvair': [('', 1961)],
 'Ford': [('Edsel', 1958), ('Model T', 1909)],
 'Lotus': [('Elite', 1958)],
 'MGA': [('Twin Cam', 1958)]}

你也可以使用你的izip_longest

from itertools import izip_longest

...

d = defaultdict(list)
for maker, model, year in izip_longest(maker, model, year):
    d[maker].append((model, year))

然后你会得到其他值的 None 。

于 2013-03-30T01:28:12.510 回答