通过索引访问Python字典元素

136 投票
12 回答
632842 浏览
提问于 2025-04-16 14:15

考虑一个字典,比如这样:

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

我想知道如何访问这个字典中的某个特定元素?比如,我想打印出Apple的第一个元素,并且只格式化这个元素,结果是'American'。

补充说明:

这个数据结构是通过解析一个输入文件在一个Python函数中创建的。不过,一旦创建,它在这次运行中就不会改变。

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

所以,如果文件内容改变,下次运行这个程序时,文件的内容会不同,因此这个数据结构的内容也会不同,但格式是一样的。

所以你看,在我的函数里,我并不知道Apple的第一个元素是'American'还是其他什么,所以我不能直接用'American'作为键。

12 个回答

22

根据你的描述,我注意到你的解析器会给你一个字典,这个字典的值也是字典,像这样:

sampleDict = {
              "key1": {"key10": "value10", "key11": "value11"},
              "key2": {"key20": "value20", "key21": "value21"}
              }

所以你需要遍历你的父字典。如果你想打印出或访问 sampleDict.values() 列表中的所有第一个字典的键,你可以使用类似下面的代码:

for key, value in sampleDict.items():
    print value.keys()[0]

如果你只想访问 sampleDict.values() 中第一个项目的第一个键,这段代码可能会对你有帮助:

print sampleDict.values()[0].keys()[0]

如果你使用你在问题中给出的例子,我是指:

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

第一个代码的输出结果是:

American
Indian

而第二个代码的输出结果是:

American

编辑 1:

上面的代码示例在 Python 3 及以上版本中是无法工作的;因为从 Python 3 开始,Python 将 keysvalues 方法的输出类型从 list 改为了 dict_values。类型 dict_values 不支持索引,但它是可迭代的。所以你需要将上面的代码修改为如下:

第一个:

for key, value in sampleDict.items():
    print(list(value.keys())[0])

第二个:

print(list(list(sampleDict.values())[0].keys())[0])
25

如果问题是,我知道我有一个字典,里面有一个字典的字典,包含了“苹果”作为水果,“美国”作为苹果的种类,那么我会使用:

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


print myDict['Apple']['American']

就像其他人建议的那样。如果问题是,当你从一个任意文件读取数据到你的字典的字典结构时,你不确定“苹果”作为水果和“美国”作为“苹果”的种类是否存在,你可以这样做:

print [ftype['American'] for f,ftype in myDict.iteritems() if f == 'Apple' and 'American' in ftype]

或者更好的是,如果你知道只有苹果有美国这个种类,这样就可以避免不必要地遍历整个字典的字典:

if 'Apple' in myDict:
    if 'American' in myDict['Apple']:
        print myDict['Apple']['American']

在这些情况下,字典存储条目的顺序其实并不重要。如果你真的很在意顺序,那么你可以考虑使用一个 OrderedDict

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

143

因为这是一个字典,所以你需要用“键”来访问它。要获取存储在“苹果”下的内容,可以这样做:

>>> mydict["Apple"]
{'American': '16', 'Mexican': 10, 'Chinese': 5}

如果想知道有多少个是美国的(16个),可以这样做:

>>> mydict["Apple"]["American"]
'16'

撰写回答