2013-04-28 58 views
-3
cars = {'2012':'BMW', '2013':'Ford'} 
new_cars = ['Fiat', 'Renault'] 

我试图让:增加价值的现有字典的键

cars = {'2012':['BMW', 'Fiat'], '2013':['Ford', 'Renault']} 

0位置从new_cars意味着元素被添加到cars'项目在0位置等。

我申请一个解决方案,我发现的地方,但它的缺陷:

for car in new_cars: 
    for k,v in cars.iteritems(): 
     cars[k] = [cars[k], car] 

赞赏任何帮助。

+6

字典没有一个项目在位置'0',他们是无序的 – jamylak 2013-04-28 10:23:23

+2

_“含义在位置0从new_cars元素被添加到汽车项目在位置0等等。“_ - 'cars'没有_position 0_。它有一个位置“”2012“'和一个位置'”2013“'。 – Eric 2013-04-28 10:23:39

+1

而'{['2012':'宝马','菲亚特'],['2011':'福特','雷诺]}'在语法上无效。 '{'2012':['宝马','菲亚特'],'2011':['福特','雷诺]}'正确 – Eric 2013-04-28 10:24:33

回答

3

你必须让你的价值成为一个清单。

例如:

>>> cars = {} 
>>> cars['2012'] = ['BMW', ' Fiat'] 
>>> cars['2013'] = ['Ford', 'Renault'] 
>>> cars 
{'2013': ['Ford', 'Renault'], '2012': ['BMW', ' Fiat']} 
>>> cars['2012'].append('Toyota') 
>>> cars 
{'2013': ['Ford', 'Renault'], '2012': ['BMW', ' Fiat', 'Toyota']} 
>>> cars['2012'] 
['BMW', ' Fiat', 'Toyota'] 

更健壮的例子:

from collections import defaultdict 

# initiate the dict 
cars = defaultdict(list) 

# function for adding cars 
def add_cars(year, new_cars): 
    if isinstance(cars, (list, set)): 
     # if more than 1 new_cars 
     cars[year].extend(new_cars) 
    else: 
     cars[year].append(new_cars) 

# add starting cars 
add_cars('2012', 'BMW') 
add_cars('2013', 'Ford') 
# add new cars 
add_cars('2012', 'Fiat') 
add_cars('2013', 'Renault') 
# view 
print cars 

>>> 
defaultdict(<type 'list'>, {'2013': ['Ford', 'Renault'], '2012': ['BMW', 'Fiat']}) 

还拥有一本字典来做到这一点的选项:

>>> cars = {'2012':['BMW'], '2013':['Ford']} 
>>> new_cars = {'2012':['Fiat'], '2013':['Renault']} 
>>> for k, v in new_cars.iteritems(): 
    cars[k].extend(v) 


>>> cars 
{'2013': ['Ford', 'Renault'], '2012': ['BMW', 'Fiat']} 
+0

感谢以上。也许我错误地应用了它(解决方案#1),因为我的代码将每个列表元素(而不仅仅是当前的)添加到字典键。你可以看一下:'for k,v in cars.iteritems(): \t for new_cars: \t \t cars [k] .append(car)'which''''2013':[''宝马','菲亚特','雷诺','2012':['福特','菲亚特','雷诺']} ps暂时我不接受你的答案,因为这个评论可能有人提供解决方案。 – nutship 2013-04-28 11:15:51

+1

你的问题是你正在将new_cars中的每辆车添加到字典中的每个键。你的代码非常含糊,你需要为每辆车指定你想要添加哪个键,你不能假设字典/代码/ python会知道你想要添加每辆车的哪个键。因此,我写的代码,你指定了一年的车... – 2013-04-28 11:21:04

+1

@ mothership在这个答案没有循环。你的问题是,你还不明白,字典是无序的。你根本不能假设任何有关字典顺序的东西。文件明确表示。 – 2013-04-28 11:24:37