2017-06-15 13 views
0

I持って、私は次のように使う辞書から私のタグとデータが利用可能:出辞書からPythonの辞書を作る

tags_df_map = zip(tags, data) 
append_series = [series for tags,series in tags_df_map if tags['Index'] =='A'] 
append_tags = [tags['Index'] for tags, series in tags_df_map if tags['Index'] =='A'] 
series_to_append = dict(zip(append_tags,append_series)) 

series_to_appendの辞書に到達するPythonでより簡単かつ効率的な方法があります?私は辞書理解の鍵を生成するためのtagにアクセスするために使用しているキーとして任意の変数my_keyを使用しています

series_to_append = {tag[my_key]: series for tag, series in zip(tags, data) 
        if tag['Index'] == 'A'} 

注:辞書内包表記を使用することができ、事前

+0

キーと値のペアが1つだけの辞書が必要ですか? – kuro

+0

[2つのタイムストリング間の時間間隔を計算する方法](https://stackoverflow.com/questions/3096953/how-to-calculate-the-time-interval-between-two-time-strings) – jlange

+0

の可能な複製@jlange、何言ってるの? – kuro

答えて

0

に感謝。以前はtag['Index']を使用してseries_to_appendの鍵を作成していました。 tag['Index']'A'に等しい値のみを使用しているため、series_to_appendには1つのキー('A')しかありません。それはあなたがあなたの内包内部変数名としてtagsを使用して、Pythonの2を使用しているように見えることから、警告として、また

data = [0,1,2,3,4,5,6] 
tags = [{'Index': 'A', 'Key': chr(x+65)} if x % 2 == 0 else {'Index': 'B', 'Key': chr(x+65)} 
     for x in range(7)] 

# the original code snippet 
tags_df_map = zip(tags, data) 
append_series = [series for tag, series in tags_df_map if tag['Index'] =='A'] 
append_tags = [tag['Index'] for tag, series in tags_df_map if tag['Index'] =='A'] 
series_to_append = dict(zip(append_tags,append_series)) 
print(series_to_append) 
>> {'A': 6} 

{tag['Index']: series for tag, series in zip(tags, data) 
        if tag['Index'] == 'A'} 
>> {'A': 6} 

{tag['Key']: series for tag, series in zip(tags, data) 
        if tag['Index'] == 'A'} 
>> {'A': 0, 'C': 2, 'E': 4, 'G': 6} 

:ここ

は、使用中のこの辞書内包表記の一例です変数 tagsは、(前に指摘した値ではなく)理解の中で割り当てられた最後の値を指します。つまり、リスト内包表記の中の変数に値を代入することは、リスト内包表記の外の変数代入と同じように扱われます。これは、理解がどのようにスコープされているので、これはPython 3では起こりませんが、そうしなければならない理由がない限り、理解の中で変数名を再利用しないことは、