访问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