通过索引访问python字典的元素

ale*_*dra 103 python dictionary

考虑像一个字典

mydict = {
  'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
  'Grapes':{'Arabian':'25','Indian':'20'} }
Run Code Online (Sandbox Code Playgroud)

如何访问该字典的特定元素?例如,我想在格式化Apple的第一个元素之后打印第一个元素,在我们的例子中只是'美国'?

附加信息上述数据结构是通过解析python函数中的输入文件创建的.一旦创建,它对于该运行保持不变.

我在我的函数中使用这个数据结构.

因此,如果文件发生更改,则下次运行此应用程序时,文件的内容会有所不同,因此此数据结构的内容将不同,但格式相同.所以你看我在我的功能中我不知道Apple的第一个元素是'美国'或其他任何东西所以我不能直接用'美国'作为关键

Mor*_*sen 115

鉴于它是一本字典,您可以使用键来访问它.将字典存储在"Apple"下,执行以下操作:

>>> mydict["Apple"]
{'American': '16', 'Mexican': 10, 'Chinese': 5}
Run Code Online (Sandbox Code Playgroud)

得到其中有多少是美国人(16),这样做:

>>> mydict["Apple"]["American"]
'16'
Run Code Online (Sandbox Code Playgroud)

  • 如何在不知道元素深度的情况下动态地做到这一点? (8认同)
  • 例如,如果您有一个深度未知的字典(例如嵌套字典),并且具有未知深度的元素“ n”存储在一个未知元素中。 (3认同)
  • 你究竟想知道什么?您可以使用`.keys()`获取字典的键,以便您可以动态访问它们. (2认同)

Jos*_*del 24

如果问题是,如果我知道我有一个包含'苹果'作为水果和'美国'作为一种苹果的词典,我会使用:

myDict = {'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
          'Grapes':{'Arabian':'25','Indian':'20'} }


print myDict['Apple']['American']
Run Code Online (Sandbox Code Playgroud)

正如其他人所说.如果问题是,你不知道当你在dict数据结构的dict中读取任意文件时,'Apple'作为水果和'美国'作为'Apple'类型存在,你可以做类似的事情:

print [ftype['American'] for f,ftype in myDict.iteritems() if f == 'Apple' and 'American' in ftype]
Run Code Online (Sandbox Code Playgroud)

或者更好,如果你知道只有苹果公司拥有美国人的类型,那么你就不必不必要地迭代整个决定词:

if 'Apple' in myDict:
    if 'American' in myDict['Apple']:
        print myDict['Apple']['American']
Run Code Online (Sandbox Code Playgroud)

在所有这些情况下,字典实际存储条目的顺序无关紧要.如果您真的关心订单,那么您可以考虑使用OrderedDict:

http://docs.python.org/dev/library/collections.html#collections.OrderedDict


Zei*_*zar 19

当我注意到你的描述时,你只知道你的解析器会给你一个字典,其值是字典,就像这样:

sampleDict = {
              "key1": {"key10": "value10", "key11": "value11"},
              "key2": {"key20": "value20", "key21": "value21"}
              }
Run Code Online (Sandbox Code Playgroud)

所以你必须迭代你的父词典.如果要打印或访问sampleDict.values()列表中的所有第一个字典键,可以使用以下内容:

for key, value in sampleDict.items():
    print value.keys()[0]
Run Code Online (Sandbox Code Playgroud)

如果您只想访问第一个项目的第一个键sampleDict.values(),这可能很有用:

print sampleDict.values()[0].keys()[0]
Run Code Online (Sandbox Code Playgroud)

如果您使用问题中给出的示例,我的意思是:

sampleDict = {
              'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
              'Grapes':{'Arabian':'25','Indian':'20'}
              }
Run Code Online (Sandbox Code Playgroud)

第一个代码的输出是:

American
Indian
Run Code Online (Sandbox Code Playgroud)

第二个代码的输出是:

American
Run Code Online (Sandbox Code Playgroud)


Fla*_*ois 9

作为奖励,我想为您的问题提供一种不同的解决方案.您似乎正在处理嵌套字典,这通常是单调乏味的,尤其是当您必须检查是否存在内部键时.

在pypi上有一些有趣的图书馆,这里有一个快速搜索给你.

在您的具体情况下,dict_digger似乎很合适.

>>> import dict_digger
>>> d = {
  'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
  'Grapes':{'Arabian':'25','Indian':'20'} 
}

>>> print(dict_digger.dig(d, 'Apple','American'))
16
>>> print(dict_digger.dig(d, 'Grapes','American'))
None
Run Code Online (Sandbox Code Playgroud)


Gab*_*abe 8

您可以使用dict['Apple'].keys()[0]获取Apple字典中的第一个键,但不能保证它会存在American.字典中键的顺序可以根据字典的内容和键的添加顺序而改变.


小智 5

你不能依赖字典的顺序,但你可以试试这个:

mydict['Apple'].items()[0][0]
Run Code Online (Sandbox Code Playgroud)

如果您希望保留订单,您可能需要使用这个:http : //www.python.org/dev/peps/pep-0372/#ordered-dict-api


Jam*_*all 5

我知道这是8岁,但似乎没有人真正阅读并回答过这个问题。

您可以在字典上调用.values()以获得内部字典的列表,从而通过索引对其进行访问。

>>> mydict = {
...  'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
...  'Grapes':{'Arabian':'25','Indian':'20'} }

>>>mylist = list(mydict.values())
>>>mylist[0]
{'American':'16', 'Mexican':10, 'Chinese':5},
>>>mylist[1]
{'Arabian':'25','Indian':'20'}

>>>myInnerList1 = list(mylist[0].values())
>>>myInnerList1
['16', 10, 5]
>>>myInnerList2 = list(mylist[1].values())
>>>myInnerList2
['25', '20']
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,我尝试了这个并得到“'dict_values'对象不支持索引”。我猜这个答案需要更新,因为您需要包装 dict_values 来恢复列表 (2认同)