访问python字典的元素

考虑像一个字典

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

我如何访问这个字典的特定元素? 例如,我想打印第一个元素,在一些格式化苹果的第一个元素,在我们的情况下,这只是“美国”?

附加信息上面的数据结构是通过parsingpython函数中的input文件创build的。 一旦创build,但它仍然是相同的运行。

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

所以如果文件发生变化,下次运行这个应用程序的时候文件的内容是不一样的,所以这个数据结构的内容会有所不同,但是格式是一样的。 所以你看我在我的function,我不知道苹果的第一个元素是“美国”或其他任何东西,所以我不能直接使用“美国”作为一个关键

鉴于这是一个字典,你可以通过使用键来访问它。 获取存储在“苹果”下的字典,请执行以下操作:

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

得到他们中有多less人是美国人(16),就这样做:

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

如果问题是,如果我知道我有一个把“苹果”作为水果和“美国”作为一种苹果的词典,我会用:

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

正如别人所build议的 如果问题是这样的,那么当你将任意文件读入字典数据结构的时候,你不知道“Apple”作为一种水果,“American”作为一种“Apple”是否存在,你可以这样做:

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

或者更好,所以如果你知道只有苹果公司的types是美国的话,那么你就不会不必要地重复整个字典的字典:

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

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

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

当我注意到你的描述时,你只知道你的parsing器会给你一个字典,它的值也是这样的字典:

 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 

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

作为奖励,我想为您的问题提供一种不同的解决scheme。 你似乎在处理嵌套的字典,这通常是乏味的,特别是当你必须检查内部键的存在。

关于这个pypi有一些有趣的图书馆,这里是一个快速search你。

在你的具体情况下, 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 

你不能依靠字典的顺序。 但是你可以试试这个:

 dict['Apple'].items()[0][0] 

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