在python中将具有公共键的项添加到字典中

2024-09-29 17:20:18 发布

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

我有这个:

items = {{'project':'Project 1','description':'Task description','time':1222222},
{'project':'Project 2','description':'Task description 2','time':1224322},
{'project':'Project 1','description':'Task description 3','time':13222152}}

我需要这样的东西:

resultitems = {
    'project':'Project 1','pritems':{
        {'description':'Task description','time':1222222},
        {'description':'Task description 3','time':13222152}},
    'project':'Project 2',pritems':{
        {'description':'Task description 2','time':1224322}},
    } 

只需将每个项目的名称作为键

我尝试过这种方法:

resultitems = {}
resultitems['Project 2'] = {}
resultitems['Project 2'].update(..)

更新不起作用,因为它将替换以前的值

在php中,这很简单

$resultitems['Project 2'][] = array(...)

但是在Python中找不到这样做的方法


Tags: 项目方法project名称tasktimeupdateitems
3条回答
result_items = {
    'house project': [{'task': 'cleaning', 'hours': 20}, {'task': 'painting', 'hours: 30', etc.],
    'garden project': [{'task': 'mowing the lawn', 'hours': 1, etc.
    etc.
}

变量“items”不正确。如果是词典列表,则应为:

项目=[{…},{…},{…}]

请写下数据的来源,你从哪里得到的数据。这将决定您填写所需词典的方式。如果您已经拥有“items”(即字典列表)中的数据,那么下面是如何转换它的:

items = [{'project':'Project 1','description':'Task description','time':1222222},
{'project':'Project 2','description':'Task description 2','time':1224322},
{'project':'Project 1','description':'Task description 3','time':13222152}]

dct = {}
for e in items :
    if e['project'] not in dct :
        dct[e['project']] = []
    dct[e['project']].append(dict([(k, v) for k,v in e.items() if k != 'project']))
print dct

输出为:

{'Project 2': [{'description': 'Task description 2', 'time': 1224322}], 'Project 1': [{'description': 'Task description', 'time': 1222222}, {'description': 'Task description 3', 'time': 13222152}]}

最后,我用了这个:

newdata = {}

for data in result['data']:
    try:
        newdata[data['project']].append({"description":data['description'],"start":data['start'],"time":data['dur']})
    except:
        newdata[data['project']] = []
        newdata[data['project']].append({"description":data['description'],"start":data['start'],"time":data['dur']})

print newdata

结果是这样的,这就是我需要的:

{
u'Project 1': [
    {'start': u'2015-07-09T18:09:41-03:00', 'description': u'Task 1 name', 'time': 1432000}, 
    {'start': u'2015-07-09T17:42:36-03:00', 'description': u'Task 2 name', 'time': 618000}
    ], 
u'Project 2': [
    {'start': u'2015-07-09T20:14:16-03:00', 'description': u'Other Task Name', 'time': 4424000}
    ], 
u'Project 3': [
    {'start': u'2015-07-09T22:29:51-03:00', 'description': u'another task name for pr3', 'time': 3697000}, 
    {'start': u'2015-07-09T19:38:02-03:00', 'description': u'something more to do', 'time': 59000}, 
    {'start': u'2015-07-09T19:11:49-03:00', 'description': u'Base tests', 'time': 0}, 
    {'start': u'2015-07-09T19:11:29-03:00', 'description': u'Domain', 'time': 0}
], 
u'Project something': [
    {'start': u'2015-07-09T19:39:30-03:00', 'description': u'Study more', 'time': 2069000}, 
    {'start': u'2015-07-09T15:46:39-03:00', 'description': u'Study more (2)', 'time': 3800000}, 
    {'start': u'2015-07-09T11:46:00-03:00', 'description': u'check forms', 'time': 660000}
]
}

顺便说一句,我没问结构本身。。相反,我需要的是某种方式来规划一个“类似这样的”结构。你知道吗

相关问题 更多 >

    热门问题