Python:使用对比较两个列表,并根据成员资格和值创建新列表

时间:2014-09-14 14:58:21

标签: python list

所以,我有一个清单:

list = [['Tuesday', 5], ['Friday', 2], ['Sunday', 3], ['Thursday', 1]]

我正在寻找构建代码,以确定列表中缺少Mon,Wed和Sat并将其添加为0值。结果列表应如图所示排序。所以,新列表看起来像:

[ ['Monday',0] ,['Tuesday',5], ['Wednesday',0] ,['Thursday',1], ['星期五',2], ['星期六',0] ,['星期天',3]]

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

使用字典,特别是dict.get

>>> lst = [['Tuesday', 5], ['Friday', 2], ['Sunday', 3], ['Thursday', 1]]
>>> weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday',
                'Friday', 'Saturday', 'Sunday']
>>> d = dict(lst)
>>> [[wd, d.get(wd, 0)] for wd in weekdays]  # d.get(wd, 0) returns 0 for missing day
[['Monday', 0], ['Tuesday', 5], ['Wednesday', 0], ['Thursday', 1],
 ['Friday', 2], ['Saturday', 0], ['Sunday', 3]]
顺便说一句,将list用作变量名称并不是一个好主意。它隐藏了内置类型/功能list

答案 1 :(得分:0)

查看dict.update。如果您从一个将所有工作日映射到零的字典开始,然后使用您读入的值进行更新,我认为它应该产生您想要的结果:

fullweek = {'Monday':0, 'Tuesday': 0, 'Wednesday': 0, 'Thursday': 0, 'Friday': 0, 'Saturday': 0, 'Sunday': 0}
newdays = {'Tuesday':5, 'Friday':2, 'Sunday':3, 'Thursday':1}
fullweek.update(newdays)

当您想要格式化结果时会发生排序,例如

for day in ['Monday', 'Tuesday', 'Friday', 'Wednesday', 'Thursday', 'Sunday', 'Saturday']:
    print day+' : %d'%fullweek[day]

答案 2 :(得分:0)

您可以使用默认值创建模板,并使用列表推导来构建数组结果数组

#template with default values. Change the value from 0 to whatever if needed
template=[['Monday', 0], ['Tuesday', 0], ['Wednesday', 0], ['Thursday', 0], ['Friday', 0], ['Saturday', 0], ['Sunday', 0]]
#current data
data=[['Tuesday', 5], ['Friday', 2], ['Sunday', 3], ['Thursday', 1]]

#build a dictionary to make lookups easy
dictData=dict(data)

#use list comprehension to insert entries from data. If not in data use from template
result = [[x[0], dictData[x[0]]] if x[0] in dictData  else x for x in template]
print result

输出:

[['Monday', 0], ['Tuesday', 5], ['Wednesday', 0], ['Thursday', 1], ['Friday', 2], ['Saturday', 0], ['Sunday', 3]]