0

昨日こんな質問した

3 つのリストを 1 つの辞書にマージする

一番の答えは、私が必要としていたもので最も正しかった

しかし、MY automobile.txt fileをもう一度見てみると、 2つのことに気づきました。

  1. リストには複数の自動車メーカーがあり、それぞれ1 つだけがリストされています。

  2. すべてのデータは適切に配置されていないようですが、いくつかあります。

私はとても近くにいますが、これまでのところです。

これが私が持っているものです

違いがある場合は注意してください。これは.txt、追加したファイルから読み取られ、データを 3 つのリストに分割しています。データがあることは知っています。私がチェックしました。

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 に答える