在Python中访问字典中的任意元素
如果一个dict
不是空的,我访问一个任意的元素为:
dict[dict.keys()[0]]
有没有更好的方法来做到这一点?
无损您可以:
dict.itervalues().next()
在Python 3上,这变成了
next (iter (dict.values()))
如果你想让它在Python 2和Python 3中工作,你可以使用six
库:
six.next(six.itervalues(dict))
虽然在这一点上是相当神秘的,我宁愿你的代码。
如果你想删除任何项目,请执行:
key, value = dict.popitem()
请注意,“第一”在这里不是一个合适的术语。 这是“任何”项,因为dict
不是一个有序的types。
如果你只需要访问一个元素(第一个是偶然的,因为dicts不能保证sorting),你可以简单地在Python 2中完成 :
my_dict.keys()[0] -> key of "first" element my_dict.values()[0] -> value of "first" element my_dict.items()[0] -> (key, value) tuple of "first" element
请注意,(据我所知)Python并不保证连续调用这些方法中的任何一个都会以相同的顺序返回列表。 这不支持Python3。
在python3中,方法是:
dict.keys()
返回types为:dict_keys()的值,通过这种方式得到字典的第一个成员键时会出错:
dict.keys()[0] TypeError: 'dict_keys' object does not support indexing
最后,我将dict.keys()转换成列表@ 1st,并通过list splice方法得到了第一个成员:
list(dict.keys())[0]
正如其他人提到的,没有“第一项”,因为字典没有保证的顺序(它们被实现为散列表)。 如果你想,例如,最小的键对应的值, thedict[min(thedict)]
将做到这一点。 如果你关心键被插入的顺序,也就是说,“first”是指“最早插入”,那么在Python 3.1中,你可以使用collections.OrderedDict ,它也在即将出现的Python 2.7中; 对于旧版本的Python,下载,安装和使用你可以在这里find的有序的字典backport(2.4和更高版本)。
忽略字典sorting的问题,这可能会更好:
next(dict.itervalues())
这样我们可以避免项目查找并生成我们不使用的关键字列表。
简而言之,Python 2和Python 3有效的代码:
next(iter(dict))
- 这个怎么样。 这里还没有提到。
- py 2&3
-
a = {"a":2,"b":3}
-
a[list(a)[0]]
# the first element is here
-
>>> 2
-
你总是可以这样做:
for k in sorted(d.keys()): print d[k]
这将给你一个一致的sorting(关于内build .hash()我猜))你可以处理的键集,如果sorting有任何意义给你。 这意味着例如,即使展开字典,数字types也是一致的。
例
# lets create a simple dictionary d = {1:1, 2:2, 3:3, 4:4, 10:10, 100:100} print d.keys() print sorted(d.keys()) # add some other stuff d['peter'] = 'peter' d['parker'] = 'parker' print d.keys() print sorted(d.keys()) # some more stuff, numeric of different type, this will "mess up" the keys set order d[0.001] = 0.001 d[3.14] = 'pie' d[2.71] = 'apple pie' print d.keys() print sorted(d.keys())
请注意,字典在打印时被sorting。 但关键集本质上是一个散列表!
在python3中
list(dict.values())[0]
对于Python 2和Python 3:
import six six.next(six.itervalues(d))