python中基于条件的列表字典拆分

2024-10-03 00:23:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有来自旅游日记的数据,这些数据是从csv文件中读入的。我把它当作一本有一大堆单子的字典。E、 g.:

print diary['ID'][1] gives 123456789
print diary['TravelReferenceDay'][1] gives 1 for a Monday

我想根据日期从数组中随机选择一个ID,例如:

^{pr2}$

我可以在csv文件中按TravelReferenceDay排列数据。我尝试过groupby方法来拆分数组:

groups = []
uniquekeys = []
for k, g in groupby(diary, diary['TravelReferenceDay']):
    groups.append(list(g))      # Store group iterator as a list
    uniquekeys.append(k)

但这就产生了一个错误:

TypeError: 'list' object is not callable

你能提出一个实现这个目标的方法吗?谢谢。在


Tags: 文件csv数据方法idfor数组list
2条回答

groupby的第二个参数是一个可调用参数,它在iterable第一个参数的连续项上调用。在

您要使用operator.itemgetter('TravelReferenceDay')

for k, g in groupby(diary, operator.itemgetter('TravelReferenceDay')):
    ...

这相当于lambda x: x['TravelReferenceDay']。在

请注意,groupby期望iterable已经按键排序;组包含具有相同键的相邻项。在

好的,这不起作用,因为您已经将数据存储为并行数组。为了便于处理,我建议将其转换为dicts列表:

^{pr2}$

我的解决方案包括:

In [1]: import random
   ...: diary = {'ID': ['11', '22', '33', '44', '55'], 'TravelReferenceDay': [1, 1, 2, 3, 1]}
   ...: monday_diary = [x for n, x in enumerate(diary['ID']) if diary['TravelReferenceDay'][n] == 1]

In [2]: monday_diary
Out[2]: ['11', '22', '55']

In [3]: random.choice(monday_diary)
Out[3]: '22'

相关问题 更多 >