合并字典中的重复值
Merge duplicate values in a dictionary
- 我有一本工作日字典:“0”= 星期一,“1”= 星期二...
- 工作日的值是一个列表 - 这些列表是时间跨度
我想创建一个合并重复时间跨度的新字典。使用包含相似工作日列表的字典键 weekdays
和包含时间跨度的键 time_span
。
输入:
{
"0":[
[
"09:00:00",
"12:00:00"
]
],
"1":[
[
"09:00:00",
"12:00:00"
]
],
"2":[
[
"09:00:00",
"12:00:00"
],
[
"12:30:00",
"15:30:00"
]
],
"3":[
[
"09:00:00",
"12:00:00"
]
],
"4":[
[
"09:00:00",
"12:00:00"
]
],
"5":[
[
"09:00:00",
"12:00:00"
],
[
"12:30:00",
"15:30:00"
]
],
"6":[
[
"09:00:00",
"12:00:00"
],
[
"12:30:00",
"15:30:00"
]
]
}
期望的输出:
[
{
"weekdays":[0, 1, 3, 4],
"time_spans":[
[
"09:00:00",
"12:00:00"
]
]
},
{
"weekdays":[2, 5, 6],
"time_spans":[
[
"09:00:00",
"12:00:00"
],
[
"12:30:00",
"15:30:00"
]
]
}
]
如果这个问题有更好的解决方案,我洗耳恭听。
我找到的解决方案不起作用,它们假定 dict 的值不是列表。流行的解决方案似乎是翻转键和值。
例如:Find dictionary keys with duplicate values
我想我太迟钝了,看不到明显的解决方案...
与您找到的既定解决方案类似,您可以将列表(和列表的列表)的表示形式存储为字符串,这使得将它们用作字典键变得简单。
def timesheetMerge(timesheet):
output = []
unique_shifts = {}
for key, val in timesheet.items():
if str(val) not in unique_shifts.keys():
unique_shifts[str(val)] = len(output)
output.append({"weekdays": [int(key)], "time_spans": val})
else:
output[unique_shifts[str(val)]]["weekdays"].append(int(key))
return output
- 我有一本工作日字典:“0”= 星期一,“1”= 星期二...
- 工作日的值是一个列表 - 这些列表是时间跨度
我想创建一个合并重复时间跨度的新字典。使用包含相似工作日列表的字典键 weekdays
和包含时间跨度的键 time_span
。
输入:
{
"0":[
[
"09:00:00",
"12:00:00"
]
],
"1":[
[
"09:00:00",
"12:00:00"
]
],
"2":[
[
"09:00:00",
"12:00:00"
],
[
"12:30:00",
"15:30:00"
]
],
"3":[
[
"09:00:00",
"12:00:00"
]
],
"4":[
[
"09:00:00",
"12:00:00"
]
],
"5":[
[
"09:00:00",
"12:00:00"
],
[
"12:30:00",
"15:30:00"
]
],
"6":[
[
"09:00:00",
"12:00:00"
],
[
"12:30:00",
"15:30:00"
]
]
}
期望的输出:
[
{
"weekdays":[0, 1, 3, 4],
"time_spans":[
[
"09:00:00",
"12:00:00"
]
]
},
{
"weekdays":[2, 5, 6],
"time_spans":[
[
"09:00:00",
"12:00:00"
],
[
"12:30:00",
"15:30:00"
]
]
}
]
如果这个问题有更好的解决方案,我洗耳恭听。
我找到的解决方案不起作用,它们假定 dict 的值不是列表。流行的解决方案似乎是翻转键和值。
例如:Find dictionary keys with duplicate values
我想我太迟钝了,看不到明显的解决方案...
与您找到的既定解决方案类似,您可以将列表(和列表的列表)的表示形式存储为字符串,这使得将它们用作字典键变得简单。
def timesheetMerge(timesheet):
output = []
unique_shifts = {}
for key, val in timesheet.items():
if str(val) not in unique_shifts.keys():
unique_shifts[str(val)] = len(output)
output.append({"weekdays": [int(key)], "time_spans": val})
else:
output[unique_shifts[str(val)]]["weekdays"].append(int(key))
return output