我可以通过以下方式使用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?提前致谢
答案 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中不会发生这种情况,但除非有充分理由这样做,否则在理解中不重用变量名称通常仍然是一种好习惯。