Python 添加两个列表的最佳方式?
我有两张单子Python 添加两个列表的最佳方式?,python,list,tuples,Python,List,Tuples,我有两张单子 list1 = [(100, A, 22), (200,B, 33), (300, C, 44)] 及 所以我想要的最终清单是 final_list = [ (100,A, 22, 333), (200,B,33,444), (300,C,44,0), (500,D,0,555)] 如果我只是加上这两个列表,它不会帮我解决问题。我怎样才能得到最终的名单 谢谢您的输入数据首先应该是字典: dict1 = {(100, "A"): 22, (200,"B"): 33, (300,
list1 = [(100, A, 22), (200,B, 33), (300, C, 44)]
及
所以我想要的最终清单是
final_list = [ (100,A, 22, 333), (200,B,33,444), (300,C,44,0), (500,D,0,555)]
如果我只是加上这两个列表,它不会帮我解决问题。我怎样才能得到最终的名单
谢谢您的输入数据首先应该是字典:
dict1 = {(100, "A"): 22, (200,"B"): 33, (300, "C"): 44}
dict2 = {(100, "A"): 333, (200,"B"): 444, (500, "D"): 555}
现在,您可以轻松构建一个组合dict:
>>> {k: (dict1.get(k, 0), dict2.get(k, 0))
... for k in dict1.viewkeys() | dict2.viewkeys()}
{(100, 'A'): (22, 333), (200, 'B'): (33, 444),
(300, 'C'): (44, 0), (500, 'D'): (0, 555)}
(Python 2.7)
如果出于某种原因,您需要对列表进行操作,我建议您首先将列表转换为字典
dict1 = {(k1, k2): v for k1, k2, v in list1}
dict2 = {(k1, k2): v for k1, k2, v in list2}
您的输入数据首先应该是字典:
dict1 = {(100, "A"): 22, (200,"B"): 33, (300, "C"): 44}
dict2 = {(100, "A"): 333, (200,"B"): 444, (500, "D"): 555}
现在,您可以轻松构建一个组合dict:
>>> {k: (dict1.get(k, 0), dict2.get(k, 0))
... for k in dict1.viewkeys() | dict2.viewkeys()}
{(100, 'A'): (22, 333), (200, 'B'): (33, 444),
(300, 'C'): (44, 0), (500, 'D'): (0, 555)}
(Python 2.7)
如果出于某种原因,您需要对列表进行操作,我建议您首先将列表转换为字典
dict1 = {(k1, k2): v for k1, k2, v in list1}
dict2 = {(k1, k2): v for k1, k2, v in list2}
考虑到A、B、C、D等是不可变的对象,最简单的方法是:
[list(set(x) | set(y)) for x, y in zip(list1, list2)]
考虑到A、B、C、D等是不可变的对象,最简单的方法是:
[list(set(x) | set(y)) for x, y in zip(list1, list2)]
当列表也是关键字时,使用它作为变量名是个坏主意。@Hooked:
list
不是一个变量名。无论如何,把它用作标识符是个坏主意,因为它是一个内置类型的名称。@SvenMarnach直到你指出这一点,我才意识到区别。我假设python允许您为任何保留字分配一个变量(我错误地假设内置类型属于该组)。因此,似乎您可以使用集合
和列表
变量,但不能使用for
或yield
。你知道这背后的基本原理吗?@Hooked:关键字是语法的一部分,而内置名称在语法上与用户定义的名称等效。解析器不需要处理与用户定义名称x
不同的list
——它只是一个名称。相反,解析器确实需要对和进行不同的处理。内置名称和关键字是非常不同的东西。@SvenMarnach这很有意义!解析器必须确定执行顺序,关键字会影响执行顺序,但类型就是类型,不管是谁创建的。我想我的困惑来自于我的C背景,其中一个内置类型,如int
是一个关键字。当它也是一个关键字时,使用list
作为变量名是个坏主意。@Hooked:list
不是一个关键字。无论如何,把它用作标识符是个坏主意,因为它是一个内置类型的名称。@SvenMarnach直到你指出这一点,我才意识到区别。我假设python允许您为任何保留字分配一个变量(我错误地假设内置类型属于该组)。因此,似乎您可以使用集合
和列表
变量,但不能使用for
或yield
。你知道这背后的基本原理吗?@Hooked:关键字是语法的一部分,而内置名称在语法上与用户定义的名称等效。解析器不需要处理与用户定义名称x
不同的list
——它只是一个名称。相反,解析器确实需要对和进行不同的处理。内置名称和关键字是非常不同的东西。@SvenMarnach这很有意义!解析器必须确定执行顺序,关键字会影响执行顺序,但类型就是类型,不管是谁创建的。我猜我的困惑来自于我的C语言背景,其中一个内置类型,如int
,是一个关键字。你可能想先试用一下。学习python:你能解释一下这里到底发生了什么吗?你可能想先试用一下。学习python:你能解释一下这里到底发生了什么吗?