2012-04-04 15 views
5

辞書を作成するために2つの別々のリストを使用する自動化されたpythonプロシージャを作成しようとしていますが、これまでに失敗しています。私は2つのソートされたリストを持っています。ここで、第1リストの第nアイテムは第2リストのn番目のアイテムに対応し、それらを辞書に結合したいと思います。2つの別々のリストにデータから辞書を取り込むPythonプロシージャ

たとえば、2つのリストのサブセットは次のとおりです。

name = ['Adam', 'Alfred', 'Amy', 'Andy', 'Bob'] 
year = [1972, 1968, 1985, 1991, 1989] 

私は私の出力になりたいでしょう:

birth_years = {'Adam':1972, 'Alfred':1968, 'Amy':1985, 'Andy':1991, 'Bob':1989} 

私はのためのループでこれを行うにしようとしていたが、私はそれを動作させることができませんでした。私はどんな助けにも感謝します。

+1

はこの宿題ですか?そうでない場合は、上流で何が起こっているのか考え直してください。あなたのデータを並行リストで構造化することは良い考えではなく、自然には起こりません。たとえば、そのようなものは自然にデータファイルの同じ行またはデータベーステーブルまたはスプレッドシートの同じ行に到着し、入力を読み込むときにそれらを「dict」に入れることができます。 –

答えて

14

タプルのリストから辞書を構築するためにzipdict機能を使用します。

birth_years = dict(zip(name, year)) 

そして、あなたが興味があれば、これは私がforループでそれをしようとする方法を次のようになります。

birth_years = {} 

for index, n in enumerate(name): 
    birth_years[n] = years[index] 

私は最初の例がもっと好きだと思います。

+1

それは 'birth_years [n] = year [index]'ではないでしょうか? – DSM

+0

うん、それはすべきです。ありがとう! – Blender

1
birth_years = {} 
for i in range(len(name)): 
    birth_years[name[i]] = year[i] 
+4

どのように非常にunpythonic。 –

0

あなたのリストは、より良いnamesyearsという名前になります。 forループでそれをやろうとすると良いスタートを切った。実用的なデータ処理の問題には、エラーチェックが含まれています。これはワンライナーでは難しいことです。例:

birth_years = {} 
for i, name in enumerate(names): 
    if name in birth_years: 
     log_duplicate(i, name, years[i])) 
    else: 
     birth_years[name] = years[i] 
1

辞書理解してみてください。

birth_years = {nm:year[idx] for idx, nm in enumerate(name)} 
関連する問題