通过索引访问Python字典元素
考虑一个字典,比如这样:
mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
我想知道如何访问这个字典中的某个特定元素?比如,我想打印出Apple的第一个元素,并且只格式化这个元素,结果是'American'。
补充说明:
这个数据结构是通过解析一个输入文件在一个Python函数中创建的。不过,一旦创建,它在这次运行中就不会改变。
我在我的函数中使用这个数据结构。
所以,如果文件内容改变,下次运行这个程序时,文件的内容会不同,因此这个数据结构的内容也会不同,但格式是一样的。
所以你看,在我的函数里,我并不知道Apple的第一个元素是'American'还是其他什么,所以我不能直接用'American'作为键。
12 个回答
根据你的描述,我注意到你的解析器会给你一个字典,这个字典的值也是字典,像这样:
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 将 keys
和 values
方法的输出类型从 list
改为了 dict_values
。类型 dict_values
不支持索引,但它是可迭代的。所以你需要将上面的代码修改为如下:
第一个:
for key, value in sampleDict.items():
print(list(value.keys())[0])
第二个:
print(list(list(sampleDict.values())[0].keys())[0])
如果问题是,我知道我有一个字典,里面有一个字典的字典,包含了“苹果”作为水果,“美国”作为苹果的种类,那么我会使用:
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
因为这是一个字典,所以你需要用“键”来访问它。要获取存储在“苹果”下的内容,可以这样做:
>>> mydict["Apple"]
{'American': '16', 'Mexican': 10, 'Chinese': 5}
如果想知道有多少个是美国的(16个),可以这样做:
>>> mydict["Apple"]["American"]
'16'