python - 仅当它们是连续的时,Python才根据值对字典中的项目进行分组?
问题描述
我一直在努力根据值对字典中的连续项目进行分组。
假设这是我的数据:
data = {
12: {
type: 'image'
},
13: {
type: 'image'
},
1: {
type: 'audio'
},
2: {
type: 'image'
},
5: {
type: 'image'
}
}
我想将相似的项目组合在一起,只有它们是连续出现的,如下所示:
group = {
12: {
type: 'image',
items: [12, 13]
},
1: {
type: 'audio'
},
2: {
type: 'image',
items: [2, 5]
}
}
这是我尝试过的:
successive = False
last_key = -1
for key, item in data.items():
if item['type'] == 'image':
if not successive: # use a new key
last_key = key
if last_key in group:
group[last_key]['items'].append(item)
else:
group[last_key] = {
'type': 'image',
'items': list()
}
group[last_key]['items'].append(item)
successive = True
else:
group[key] = item
successive = False
但它将所有图像分组在一个列表中。我真的很困惑我在逻辑中错过了什么?
解决方案
试试这个解决方案。对于只有一个项目的任何组,项目的长度将仅为 1。
from copy import deepcopy
currentType = list(data.values())[0]['type']
currentVal = list(data.keys())[0]
currentItems = [list(data.keys())[0]]
res = {}
for k,v in data.items():
if k not in res and k == currentVal:
res[currentVal] = {'type': v['type'], 'items' : deepcopy(currentItems)}
elif k not in res and v['type'] == currentType:
res[currentVal]['items'].append(k)
else:
currentItems.clear()
currentVal = k
currentType = data[k]['type']
currentItems.append(k)
res[currentVal] = {'type': currentType, 'items' : deepcopy(currentItems)}
print(res)
推荐阅读
- r - 如何处理 GLMM 中高度偏斜的残差
- json - Golang SJSON 动态 JSON
- json - ansible json解析器查询多个对象值
- git - 带有邮箱补丁的 git-am 在包含求职信时失败
- android - Webview 键盘问题
- regex - 可变长度和频率的数字和字母的正则表达式解析
- python - 使用 django-filters 按嵌套外键字段过滤
- javascript - Material-UI Drawer 在平板电脑上的作用不同
- r - Position_dodge 与 preserve='single' 不对齐 geom_text
- abap - 在运行时更改 Dynpro 输出字段的可见长度?