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