Python:使用元组列表从dict创建两个列表
鉴于这条格言:Python:使用元组列表从dict创建两个列表,python,list,dictionary,tuples,Python,List,Dictionary,Tuples,鉴于这条格言: d={0: [(78.65, 89.86), (28.0, 23.0), (63.43, 9.29), (66.47, 55.47), (68.0, 4.5), (69.5, 59.0), (86.26, 1.65), (84.2, 56.2), (88.0, 18.53), (111.0, 40.0)], ...} 如何创建两个列表,使得y取每个元组的第一个元素,x取第二个元素,为d中的每个键 在上面的示例中(仅显示key=0),这将是:
d={0: [(78.65, 89.86),
(28.0, 23.0),
(63.43, 9.29),
(66.47, 55.47),
(68.0, 4.5),
(69.5, 59.0),
(86.26, 1.65),
(84.2, 56.2),
(88.0, 18.53),
(111.0, 40.0)], ...}
如何创建两个列表,使得y
取每个元组的第一个元素,x
取第二个元素,为d中的每个键
在上面的示例中(仅显示key=0
),这将是:
y=[78.65, 28.0, 63.43, 66.47, 68.0, 69.5, 86.26, 84.2, 88.0, 111.0]
x=[89.86, 23.0, 9.29, 55.47, 4.5, 59.0, 1.65, 56.2, 18.53, 40.0]
我的尝试错误(我只尝试了x
列表):
因为:
TypeError Traceback (most recent call last)
<ipython-input-97-bdac6878fe6c> in <module>()
----> 1 x=[v[i[1]] for v in d.values() for i in v]
TypeError: list indices must be integers, not numpy.float64
TypeError回溯(最近一次调用)
在()
---->1 x=[v[i[1]]表示d中的v。值()表示v中的i]
TypeError:列表索引必须是整数,而不是numpy.float64
这是怎么回事?你是说这样的吗
z = [i for v in d.values() for i in v]
x, y = zip(*z)
你是说像这样的事吗
z = [i for v in d.values() for i in v]
x, y = zip(*z)
如果我正确理解了您的注释,您希望获得与键
0
关联的元组列表的x
和y
坐标。在这种情况下,您可以简单地使用zip(…)
和map(…)
到列表
s:
y,x = map(list,zip(*d[0]))
如果您不想在以后的程序中更改x
和y
——不可变列表基本上是tuple
s,您可以省略映射(列表…)
:
请注意,如果字典包含两个元素,例如:
{0:[(1,4),(2,5)],
1:[(1,3),(0,2)]}
它将仅处理
0
键的数据。因此y=[1,2]
和x=[4,5]
如果我正确理解了您的评论,您希望获得与键0
关联的元组列表的x
和y
坐标。在这种情况下,您可以简单地使用zip(…)
和map(…)
到列表
s:
y,x = map(list,zip(*d[0]))
如果您不想在以后的程序中更改x
和y
——不可变列表基本上是tuple
s,您可以省略映射(列表…)
:
请注意,如果字典包含两个元素,例如:
{0:[(1,4),(2,5)],
1:[(1,3),(0,2)]}
它将仅处理
0
键的数据。所以y=[1,2]
和x=[4,5]
我不清楚如果字典包含两个元素会发生什么…你是说另一个具有key=1
的元组列表?在这种情况下,不会太多,因为我想在for循环中提取这两个列表,以便在每次迭代中它们都有所不同。这是否回答了您的问题?x=[i[1]表示d中的v。value()表示v中的i]
应该适用于您的代码段。我不清楚如果字典包含两个元素会发生什么情况……您是指另一个具有key=1
的元组列表?在这种情况下,不会太多,因为我想在for循环中提取这两个列表,以便在每次迭代中它们都有所不同。这回答了你的问题吗?x=[i[1]表示d中的v。value()表示v中的i]
应该适用于你的代码段。为什么要构造一个新元组而不返回i
本身?为什么要构造一个新元组而不返回i
本身?是的,我是。这些坐标以(行,列)
的形式返回。或者,在Python3中,它生成迭代器,python将迭代器解压为元组。我喜欢这个解决方案,但是如果y,x=zip(*d[0])
嵌套在for循环中,以迭代所有键会怎么样?将其更改为y,x=zip(*d[i])
是否足够?@CF84:是。如果您对d中的i使用:
它将获取每个键,并为该键获取x
和y
。是的,我是。这些坐标以(行,列)
的形式返回。或者,在Python3中,它生成迭代器,python将迭代器解压为元组。我喜欢这个解决方案,但是如果y,x=zip(*d[0])
嵌套在for循环中,以迭代所有键会怎么样?将其更改为y,x=zip(*d[i])
是否足够?@CF84:是。如果对d中的i使用:
它将获取每个键的x
和y
。