从退出词典制作python词典

时间:2017-06-15 12:36:54

标签: python python-2.7

我可以通过以下方式使用dict中的标签和数据:

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 dict?提前致谢

1 个答案:

答案 0 :(得分: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中不会发生这种情况,但除非有充分理由这样做,否则在理解中不重用变量名称通常仍然是一种好习惯。