Car*_*.py 3 python dictionary python-2.7
我想减去dict1 - dict2.如果结果是狗的负数并不重要,我只是有兴趣学习这个概念:)
owner = ['Bob', 'Sarah', 'Ann']
dict1 = {'Bob': {'shepherd': [4,6,3],'collie': [23, 3, 45], 'poodle':[2,0,6]}, {'Sarah': {'shepherd': [1,2,3],'collie': [3, 31, 4], 'poodle': [21,5,6]},{'Ann': {'shepherd': [4,6,3],'collie': [23, 3, 45], 'poodle': [2,10,8]}}
dict2 = {'Bob': {'shepherd': 10,'collie': 15,'poodle': 34},'Sarah': {'shepherd': 3,'collie': 25,'poodle': 4},'Ann': {'shepherd': 2,'collie': 1,'poodle': 0}}
Run Code Online (Sandbox Code Playgroud)
我想要:
wanted = dict1 = {'Bob': {'shepherd': [-6,-4,-7],'collie': [8, -12, 30], 'poodle':[-32,-34,-28]}, {'Sarah': {'shepherd': [-2,-1,0],'collie': [-22, 6, -21], 'poodle': [17,1,2]},{'Ann': {'shepherd': [2,4,1],'collie': [22, 2, 44], 'poodle': [2,10,8]}}
Run Code Online (Sandbox Code Playgroud)
我仍然是字典的新手,所以这里是我一直在尝试但得到NoneType错误.我假设它是因为dict1有比dict2更多的值,但我找不到执行上述计算的方法.
wanted = {}
for i in owner:
wanted.update({i: dict1.get(i) - dict2.get(i)})
Run Code Online (Sandbox Code Playgroud)
您可以使用嵌套字典理解.我稍微调整了你的字典,因为它的语法不正确(有一些额外的花括号).不需要所有者数组,因为我们可以只使用字典中的键.
dict1 = {
'Bob': {
'shepherd': [4, 6, 3],
'collie': [23, 3, 45],
'poodle': [2, 0, 6],
},
'Sarah': {
'shepherd': [1, 2, 3],
'collie': [3, 31, 4],
'poodle': [21, 5, 6],
},
'Ann': {
'shepherd': [4, 6, 3],
'collie': [23, 3, 45],
'poodle': [2, 10, 8],
}
}
dict2 = {
'Bob': {'shepherd': 10, 'collie': 15, 'poodle': 34},
'Sarah': {'shepherd': 3, 'collie': 25, 'poodle': 4},
'Ann': {'shepherd': 2, 'collie': 1, 'poodle': 0},
}
wanted = {
owner: {
dog: [num - dict2[owner][dog] for num in num_list]
for dog, num_list in dog_dict.iteritems()
} for owner, dog_dict in dict1.iteritems()
}
print wanted
Run Code Online (Sandbox Code Playgroud)
输出:
{
'Sarah': {
'shepherd': [-2, -1, 0],
'collie': [-22, 6, -21],
'poodle': [17, 1, 2]
},
'Bob': {
'shepherd': [-6, -4, -7],
'collie': [8, -12, 30],
'poodle': [-32, -34, -28]
},
'Ann': {
'shepherd': [2, 4, 1],
'collie': [22, 2, 44],
'poodle': [2, 10, 8]
}
}
Run Code Online (Sandbox Code Playgroud)
这假设dict2具有与dict1相同的所有键.如果不是这种情况,您需要设置一些默认值以避免a KeyError.
编辑:这里是一个简短的解释,说明如何解释那些不熟悉字典理解的字典理解.如果你对列表推导更熟悉,字典理解非常相似,只有你创建一个字典而不是列表.所以,{i: str(i) for i in xrange(10)}会给你一本字典{0: '0', 1: '1', ..., 9: '9'}.
现在我们可以将其应用于解决方案.这段代码:
wanted = {
owner: {
dog: [num - dict2[owner][dog] for num in num_list]
for dog, num_list in dog_dict.iteritems()
} for owner, dog_dict in dict1.iteritems()
}
Run Code Online (Sandbox Code Playgroud)
相当于:
wanted = {}
for owner, dog_dict in dict1.iteritems():
wanted[owner] = {}
for dog, num_list in dog_dict.iteritems():
wanted[owner][dog] = [num - dict2[owner][dog] for num in num_list]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
960 次 |
| 最近记录: |