2017-06-15 60 views
0

我提供給我的標籤和數據的字典,我以下列方式使用:使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)) 

有沒有在Python更方便,更有效的方法來在series_to_append字典到達?在此先感謝

+0

你想只有一個鍵,值對的字典? – kuro

+0

[如何計算兩個時間字符串之間的時間間隔]的可能重複(https://stackoverflow.com/questions/3096953/how-to-calculate-the-time-interval-between-two-time-string) – jlange

+0

@jlange,你在說什麼? – kuro

回答

0

您可以使用字典解析:

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

請注意,我用的任意可變my_key因爲我使用的訪問tag生成字典理解的密鑰的密鑰。之前,您曾使用tag['Index']series_to_append創建密鑰。這將導致series_to_append只有一個密鑰('A'),因爲您只使用其中tag['Index']等於'A'的值。

下面是這個字典解析中使用的例子:

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} 

此外,作爲一個警告,因爲它似乎你正在使用Python 2,使用tags爲您內涵內部變量名將導致變量tags指向它在理解中分配的最後一個值(而不是它之前指向的值)。也就是說,將一個值賦給列表理解中的一個變量將被視爲與列表理解之外的變量賦值相同。值得注意的是,由於如何理解範圍,在Python 3中不會發生這種情況,但除非有足夠的理由這樣做,否則通常不要在理解中重用變量名稱。