4

3 つのリストを 1 つの辞書にマージする必要があります。これらのリストは、私がフォーマットした 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

私が次のことを試したとき:

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

私は何をすべきか?

4

4 に答える 4

9

で正しい軌道に乗っていましたzipが、次の点に注意してください。

返されるリストは、最短の引数シーケンスの長さに切り捨てられます。

それでよろしければ、データをタプルのリストに圧縮し、キーを圧縮して、すべてを に渡すことができますdict()

欠損値を処理したい場合は、itertools izip_longest(Python 2)またはzip_longest(Python 3)をチェックアウトします。

iterable の長さが不均一な場合、欠損値はfillvalueで埋められます。

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)

出力:

{'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')}
于 2013-03-29T06:48:00.970 に答える
5

これはどうですか:

>>> maker =['Horsey', 'Ford', 'Overland', 'Scripps-Booth']
>>> year = ['1899', '1909', '1911', '1913']
>>> model = ['Horseless', 'Model T', 'OctoAuto', 'Bi-Autogo']
>>> d = dict(zip(maker,zip(year,model)))
{'Overland': ('1911', 'OctoAuto'), 'Horsey': ('1899', 'Horseless'), 'Scripps-Booth': ('1913', 'Bi-Autogo'), 'Ford': ('1909', 'Model T')}
于 2013-03-29T06:46:24.687 に答える
3

あなたが望むのは次のように聞こえます:

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

それはあなたに与えるでしょう:

{'Horsey':(1899,'Horseless'),'Ford':(1909,'Model T'),'Overland':(1911,'OctoAuto')...}
于 2013-03-29T06:32:09.830 に答える
2

これはあなたが探しているものですか?

>>> car_dict = {maker[i]:[year[i], model[i]] for i in xrange(len(maker))}
>>> car_dict
{'Overland': ['1911', 'OctoAuto'], 'Horsey': ['1899', 'Horseless'], 'Scripps-Booth': ['1913', 'Bi-Autogo'], 'Ford': ['1909', 'Model T']}
于 2013-03-29T06:28:49.920 に答える