python - Python连接两个具有共同第一个索引的列表
问题描述
我有两个包含以下数据的 python 列表
list1 = [[datetime.date(2019, 12, 11), 4], [datetime.date(2019, 12, 14), 3]]
list2 = [[datetime.date(2019, 12, 14), 2], [datetime.date(2019, 12, 16), 9]]
我必须将两个列表与第一个索引(即datetime.date
字段)结合起来才能通用。此外,如果两者的第一个索引都不匹配,请将值设置为。
此外,如果列表中的任何一个为空白,请将相应位置设置为 0。
结果将是
list_new = [
[datetime.date(2019, 12, 11), 4, 0],
[datetime.date(2019, 12, 14), 3, 2],
[datetime.date(2019, 12, 16), 0, 9]
]
我尝试使用zip
喜欢
new_list = [a + [b[1]] for (a, b) in zip(list1, list2)]
但这似乎不起作用。
解决方案
简单(非最佳)单线:
[[element, dict(list1).get(element, 0), dict(list2).get(element, 0)] for element in set([l[0] for l in list1 + list2])]
解释:
- 从列表中获取一组唯一的第一个元素:
>>> s = set([l[0] for l in list1 + list2])
>>> s
set([datetime.date(2019, 12, 11), datetime.date(2019, 12, 14), datetime.date(2019, 12, 16)])
- 将两个元素的列表转换为 dict:
>>> d1 = dict(list1)
>>> d1
{datetime.date(2019, 12, 11): 4, datetime.date(2019, 12, 14): 3}
>>> d2 = dict(list2)
>>> d2
{datetime.date(2019, 12, 14): 2, datetime.date(2019, 12, 16): 9}
- 最后,形成结果列表:
>>> [[element] + [d1.get(element, 0)] + [d2.get(element, 0)] for element in s]
[[datetime.date(2019, 12, 11), 4, 0], [datetime.date(2019, 12, 14), 3, 2], [datetime.date(2019, 12, 16), 0, 9]]
推荐阅读
- javascript - 如何存储来自 fetch get 请求的数据
- java - 在 Spring JPA 中使用 BigInteger 作为主键给出 - 列“id”的列说明符不正确
- javascript - 文件操作耗时较长,收到“正在运行[文件,保存,删除创建参与者”消息
- r - R:改变R中线条的颜色
- javascript - 总是在函数表达式上使用函数声明有什么缺点吗?
- awk - PROCINFO 如何在特定记录上显示 FS 信息?
- python - BokehUserWarning:ColumnDataSource 的列必须具有相同的长度
- sparse-matrix - 来自 Pytrilinos 的 LAPACK 用于最小二乘
- php - PHP:如果在数字前使用 0,则 ksort 返回错误结果
- javascript - sapper/svelte 中的预加载功能不运行