我可以从一个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?提前感谢
发布于 2017-06-16 08:32:22
你可以用字典理解:
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}另外,作为警告,由于您使用的似乎是Python2,所以在理解中使用tags作为变量名将导致变量tags指向它在理解中分配的最后一个值(而不是它之前指出的值)。也就是说,为列表理解中的变量赋值与列表理解之外的变量赋值一样。值得注意的是,由于理解的范围如何,Python 3中没有出现这种情况,但是除非有充分的理由,否则在理解中不重用变量名仍然是很好的实践。
https://stackoverflow.com/questions/44567725
复制相似问题