如何使用字典理解编写代码?

2024-06-01 21:38:51 发布

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

如何使用字典理解重新编写代码的最后三行?你知道吗

  • 如果dictionary中已存在day\u of \u week值作为键,请将该值添加到现有的关联值中。你知道吗
  • 如果day\u of \u week值不作为键存在,请将其添加到字典中,并将关联的值设置为该行的出生值。你知道吗

split2列表的列名如下所示。你知道吗

'year, month, date_of_month, day_of_week, births'

 split2 = [['1994', '1', '2', '7', '7772'],
 ['1994', '1', '3', '1', '10142'],
 ['1994', '1', '4', '2', '11248'],
 ['1994', '1', '5', '3', '11053'],
 ['1994', '1', '6', '4', '11406'],
 ['1994', '1', '7', '5', '11251'],
 ['1994', '1', '8', '6', '8653'],
 ['1994', '1', '9', '7', '7910'],
 ['1994', '1', '10', '1', '10498'],
 ['1994', '1', '11', '2', '11706'],
 ['1994', '1', '12', '3', '11567'],
 ['1994', '1', '13', '4', '11212'],
 ['1994', '1', '14', '5', '11570'],
 ['1994', '1', '15', '6', '8660'],
 ['1994', '1', '16', '7', '8123']]


dayofweek = [int(i[3]) for i in split2]
births = [int(i[-1]) for i in split2]
combine = list(zip(dayofweek, births))
edict = {}
for i in combine:
    if i[0] in edict.keys():
        edict[i[0]] += i[-1]
    else:
        edict[i[0]] = i[-1]
print(edict)

output:
{1: 20640, 2: 22954, 3: 22620, 4: 22618, 5: 22821, 6: 17313, 7: 23805}

Tags: of代码infordictionary字典intedict
2条回答
for i in combine:
    edict[i[0]] = edict.get(i[0], 0) + i[1]

如果不是更优雅的解决方案,我会这么做

for i, v in combine:
    edict[i] = edict.get(i, 0) + v

之所以可以这样做,是因为combine的元素是tuple类型的,只要说“i, v”,就会自动将其解包
相当于说

for i in combine:
    i, v = i

这样做可以:

edict = {d: sum(b for w, b in combine if w == d) for d in set(dayofweek)}

由于您希望dict基于一周中出现在split2中的每一天,或者一组唯一的dict,因此可以迭代set(dayofweek),然后针对一周中的某一天,通过迭代combine并匹配该天并用生成器将该天的出生数输出到sum来生成当天的dict键,该值是当天出生数的总和。你知道吗

相关问题 更多 >