在Python中访问对象的第n个元素

在Python中访问对象的第n个元素,python,Python,这里是json {u'skeleton_horde': 2, u'baby_dragon': 3, u'valkyrie': 5, u'chr_witch': 1, u'lightning': 1, u'order_volley': 6, u'building_inferno': 3, u'battle_ram': 2} 我想让名单看起来像这样 skeleton_horde baby_dragon valkyrie lightning order_volley building_inferno

这里是json

{u'skeleton_horde': 2, u'baby_dragon': 3, u'valkyrie': 5, u'chr_witch': 1, u'lightning': 1, u'order_volley': 6, u'building_inferno': 3, u'battle_ram': 2}
我想让名单看起来像这样

skeleton_horde baby_dragon valkyrie lightning order_volley building_inferno
这是python

print(x['right']['troops'])
令人惊讶的是,没有关于如何获取对象(不是数组)的n元素的文档。我试过:

print(x['right']['troops'][1])

但是它不起作用。

您想使用
dict.keys()
来获取dict的键值列表*:

print(list(x['right']['troops'].keys()))

*在Python 3中,它是。它将是Python 2中的一个列表。

您想使用
dict.keys()
来获取dict的键值列表*:

print(list(x['right']['troops'].keys()))

*在Python 3中,它是。它将是Python 2中的一个列表。

无法获取
目录中的第n项(可能您将Python目录与JavaScript对象混为一谈),原因很简单,它们是无序的

然而,有一种词典确实保持了其键的顺序,它的名称恰当地称为
orderedict

解决方案 正如另一位评论者所指出的,您的问题有一个解决方案,但它仍然不会按照定义的顺序为您提供关键点:

' '.join(obj['right']['troops'])

在CPython(3.6)的最新版本中,字典键确实是有序的。我不确定我是否会依赖于特定于实现的行为,或者在这种情况下您是否需要订购密钥,但很高兴知道这一点。感谢@ScottColby向我指出这一点

无法获取
目录中的第n项(可能您将Python目录与JavaScript对象混为一谈),原因很简单,它们是无序的

然而,有一种词典确实保持了其键的顺序,它的名称恰当地称为
orderedict

解决方案 正如另一位评论者所指出的,您的问题有一个解决方案,但它仍然不会按照定义的顺序为您提供关键点:

' '.join(obj['right']['troops'])

在CPython(3.6)的最新版本中,字典键确实是有序的。我不确定我是否会依赖于特定于实现的行为,或者在这种情况下您是否需要订购密钥,但很高兴知道这一点。感谢@ScottColby向我指出这一点

首先要提取关键点:

x['right']['troops']
然后你想用空间来连接它们

' '.join(x['right']['troops'])

但是,由于Python字典是无序的,因此其顺序与您的不同。

首先要提取键:

x['right']['troops']
然后你想用空间来连接它们

' '.join(x['right']['troops'])


但是,由于Python字典是无序的,因此这将与您拥有的顺序不同。

我假设您处理的是Python字典而不是JSON文件?没有第n个元素。dict在语义上是无序的。@user2357112在语义上不是,它们是按键散列排序的。@SwiftsNamesake:它们甚至不是按散列值排序的。其中涉及哈希,但即使是具有相同键和相同键哈希的dict也可能以不同的顺序显示。只是出于好奇-为什么缺少两个元素?我假设您处理的是Python字典而不是JSON文件?没有第n个元素。dict在语义上是无序的。@user2357112在语义上不是,它们是按键散列排序的。@SwiftsNamesake:它们甚至不是按散列值排序的。虽然涉及哈希,但即使是具有相同键和相同键哈希的dict也可能以不同的顺序出现。只是出于好奇-为什么缺少两个元素?谢谢!我习惯于javascript和遍历数组:)视图或列表取决于Python版本。给定Unicode字符串上的
u
标记,我猜是Python 2。无需调用
keys()
,您只需将
list
应用于
dict
list({'a':1})
结果为
['a']
@DanD。这是绝对正确的。我倾向于使用
keys()
来实现
values()
items()的并行性和清晰性(至少对我自己而言)。如果您需要解释器的每一盎司速度,避免额外的查找和调用可能会有所帮助(但我打赌列表构造函数无论如何都能做到…),谢谢!我习惯于javascript和遍历数组:)视图或列表取决于Python版本。给定Unicode字符串上的
u
标记,我猜是Python 2。无需调用
keys()
,您只需将
list
应用于
dict
list({'a':1})
结果为
['a']
@DanD。这是绝对正确的。我倾向于使用
keys()
来实现
values()
items()的并行性和清晰性(至少对我自己而言)。如果您需要解释器的每一盎司速度,避免额外的查找和调用可能会有所帮助(但我打赌列表构造函数无论如何都会这样做…)。这只是另一个放弃Python 2的原因:)*我的评论中的一个小错误:在CPython3.6中。我知道在其他的实现中还不能保证。我查看了链接。我想你注意到编辑了?是的,我现在确实看到了。我还想更正我的评论——是您的编辑提醒了我:)在Python 3.6中,这在Python 3.7中甚至可以得到保证。这只是另一个放弃Python 2的原因:)*我的评论中的一个小错误:在CPython3.6中。我知道在其他的实现中还不能保证。我查看了链接。我想你注意到编辑了?是的,我现在确实看到了。我只是想纠正我的评论——是你的编辑提醒了我:)