Python 从字典中查找后相同名称的和值
字符串列表,即字符串的一部分,是字典中的一个键。我想从字典中按键返回值,然后对值求和Python 从字典中查找后相同名称的和值,python,list,dictionary,sum,Python,List,Dictionary,Sum,字符串列表,即字符串的一部分,是字典中的一个键。我想从字典中按键返回值,然后对值求和 d = {"2016_05" : 665, "2016_04" : 462, "2015_03" : 568, "2015_08" : 895} for a in ['Toyota_2015_03', 'Toyota_2015_04', 'Kia_2016_01', 'Kia_2016_04', 'Kia_2016_05']: name, year, month = a.split('_')
d = {"2016_05" : 665,
"2016_04" : 462,
"2015_03" : 568,
"2015_08" : 895}
for a in ['Toyota_2015_03', 'Toyota_2015_04', 'Kia_2016_01', 'Kia_2016_04', 'Kia_2016_05']:
name, year, month = a.split('_')
sales = d.get(year + '_' + month)
if sales is not None:
print (name + '_' + str(sales))
输出:
Toyota_568
Kia_462
Kia_665
我想用“起亚”和“丰田”对数字求和(也就是说,用某种形式得到起亚:1127,丰田:568)。好的方法是什么?谢谢。这会有用的
d = {"2016_05" : 665,
"2016_04" : 462,
"2015_03" : 568,
"2015_08" : 895}
new_d = {}
for a in ['Toyota_2015_03', 'Toyota_2015_04', 'Kia_2016_01', 'Kia_2016_04', 'Kia_2016_05']:
name, year, month = a.split('_')
sales = d.get(year + '_' + month)
if sales is not None:
if name in new_d:
new_d[name] = new_d[name] + sales
else:
new_d[name] = sales
使用
collections.defaultdict
all_sales = {}
for a in ['Toyota_2015_03', 'Toyota_2015_04', 'Kia_2016_01', 'Kia_2016_04', 'Kia_2016_05']:
name, year, month = a.split('_')
sales = d.get(year + '_' + month, 0)
if sales: # can be removed if you don't have car types with no sales or you want to see those cars
all_sales[name] = all_sales.get(name, 0) + sales
print(all_sales)
Ex:
from collections import defaultdict
d = {'2016_05': 665, '2016_04': 462, '2015_03': 568, '2015_08': 895}
result = defaultdict(int)
for a in ['Toyota_2015_03', 'Toyota_2015_04', 'Kia_2016_01', 'Kia_2016_04', 'Kia_2016_05']:
name, year_month = a.split('_', 1) #split with maxsplit param
sales = d.get(year_month)
if sales is not None:
result[name] +=sales #Increment Count
print(result)
defaultdict(<class 'int'>, {'Toyota': 568, 'Kia': 1127})
{'Toyota': 568, 'Kia': 1127}
输出:
from collections import defaultdict
d = {'2016_05': 665, '2016_04': 462, '2015_03': 568, '2015_08': 895}
result = defaultdict(int)
for a in ['Toyota_2015_03', 'Toyota_2015_04', 'Kia_2016_01', 'Kia_2016_04', 'Kia_2016_05']:
name, year_month = a.split('_', 1) #split with maxsplit param
sales = d.get(year_month)
if sales is not None:
result[name] +=sales #Increment Count
print(result)
defaultdict(<class 'int'>, {'Toyota': 568, 'Kia': 1127})
{'Toyota': 568, 'Kia': 1127}
defaultdict(,{'Toyota':568,'Kia':1127})
试试这个。通过使用纯python命令
>>> d = {"2016_05" : 665, "2016_04" : 462, "2015_03" : 568, "2015_08"
: 895}
>>> li = ['Toyota_2015_03', 'Toyota_2015_04', 'Kia_2016_01',
'Kia_2016_04', 'Kia_2016_05']
>>> cars = dict()
>>> for ele in li:
... name, year, month = ele.split('_')
... sales = year+'_'+month
... if sales in d.keys():
... if name in cars.keys():
... cars[name] += d[sales]
... else:
... cars[name] = d[sales]
...
>>> cars
{'Toyota': 568, 'Kia': 1127}
>>>
用另一个数字来计算销售额。您可以使用带有默认值的
dict.get()
来模拟defaultdict
all_sales = {}
for a in ['Toyota_2015_03', 'Toyota_2015_04', 'Kia_2016_01', 'Kia_2016_04', 'Kia_2016_05']:
name, year, month = a.split('_')
sales = d.get(year + '_' + month, 0)
if sales: # can be removed if you don't have car types with no sales or you want to see those cars
all_sales[name] = all_sales.get(name, 0) + sales
print(all_sales)
输出
{'Toyota': 568, 'Kia': 1127}
您可以使用字典保存输出:
result = {}
for e in data:
name, year_month = e.split('_', 1)
result[name] = result.get(name, 0) + d.get(year_month, 0)
result
输出:
from collections import defaultdict
d = {'2016_05': 665, '2016_04': 462, '2015_03': 568, '2015_08': 895}
result = defaultdict(int)
for a in ['Toyota_2015_03', 'Toyota_2015_04', 'Kia_2016_01', 'Kia_2016_04', 'Kia_2016_05']:
name, year_month = a.split('_', 1) #split with maxsplit param
sales = d.get(year_month)
if sales is not None:
result[name] +=sales #Increment Count
print(result)
defaultdict(<class 'int'>, {'Toyota': 568, 'Kia': 1127})
{'Toyota': 568, 'Kia': 1127}
如果year\u month
不在变量d
中,则不希望将0
作为值的键包含在变量中,则可以使用:
result = {}
for e in data:
name, year_month = e.split('_', 1)
sales = d.get(year_month, None)
if sales is not None:
result[name] = result.get(name, 0) + sales
你能解释一下你是如何得到“起亚:1127,丰田:568”的吗?@OlvinRoght,这就是我想去的地方…投票率较高。您可以避免检查时间戳的存在,在这种情况下只需添加零即可
d.get(year\u month,0)
@Pynchia。这可能会给出空的dict值。例如:{'Toyota':568,'Kia':1127,'BMW':0}
…如果OP对此没有问题,那么使用d.get(year\u month,0)
是完美的。感谢您在这个问题上的知识共享和帮助。考虑得真周到。但另一个答案来得更早,和你的答案一样直接。你介意我把它当作答案吗?很好,别担心:)