在Python中,如何在键和排序列表中放置多个值?

2024-04-18 18:04:59 发布

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

如何从两个列表中生成dict并在键中放入多个值?你知道吗

最后我列出了两张单子

time = ['11:00', '18:19', '18:19', '00:00', '08:01', '18:19', '00:00']

activity = ['a', 'b', 'c', 'd', 'a', 'f', 'g']

我试着用dict(zip(time,value)),把所有的东西放在一起,但都没有成功

我的目标是让dict以键作为时间,以值作为活动 以便:

{'11:00': 'a'

'18:19': 'b', 'c', 'f'

'00:00': 'd', 'g'

'08:01': 'a'}

def get_time_activity(input_filename):
    file = open(input_filename, mode='r')
    input_string = file.read()
    hour = []
    minute = []
    activity = []
    for match in re.finditer(r"(\d+)\D(\d+)\s+(\w+)", input_string):
        hour.append(match.group(1))
        minute.append(match.group(2))
        activity.append(match.group(3))

    time24 = zip(hour, minute)
    result = list(time24)
    time = [':'.join(r) for r in result]
    return time, activities

Tags: inforinputstringtimematchgroupactivity
2条回答

一种方法是转换为数据帧,然后按以下方式分组:

import pandas as pd

# setup 
df = pd.DataFrame({
    "time": ['11:00', '18:19', '18:19', '00:00', '08:01', '18:19', '00:00'],
    "activity": ['a', 'b', 'c', 'd', 'a', 'f', 'g']
})

# logic
df.groupby("time")["activity"].apply(list).to_dict()

输出:

{'00:00': ['d', 'g'], '08:01': ['a'], '11:00': ['a'], '18:19': ['b', 'c', 'f']}

使用zip+dict.setdefault的简单for循环可以:

time = ['11:00', '18:19', '18:19', '00:00', '08:01', '18:19', '00:00']
activity = ['a', 'b', 'c', 'd', 'a', 'f', 'g']

result = {}
for ti, ai in zip(time, activity):
    result.setdefault(ti, []).append(ai)

print(result)

输出

{'11:00': ['a'], '18:19': ['b', 'c', 'f'], '00:00': ['d', 'g'], '08:01': ['a']}

相关问题 更多 >