如果mydict不为空,则访问任意元素,如下:
mydict[mydict.keys()[0]]
还有什么更好的办法吗?
如果mydict不为空,则访问任意元素,如下:
mydict[mydict.keys()[0]]
还有什么更好的办法吗?
当前回答
你可以做:
for k in sorted(d.keys()):
print d[k]
这将为您提供一个一致排序的键集(我猜是相对于builtin.hash()),如果排序对您有任何意义,您可以对其进行处理。这意味着,例如,即使扩展字典,数值类型也会保持一致排序。
例子
# 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())
请注意,字典在打印时是排序的。但是键集本质上是一个hashmap!
其他回答
如果你只需要访问一个元素(碰巧是第一个元素,因为字典不保证顺序),你可以在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不能保证连续两次调用这些方法中的任何一个都会返回相同顺序的list。Python3不支持这一点。
在Python 3中:
list(my_dict.keys())[0] # key of "first" element
list(my_dict.values())[0] # value of "first" element
list(my_dict.items())[0] # (key, value) tuple of "first" element
在Python 3中,非破坏性和迭代性:
next(iter(mydict.values()))
在Python 2中,非破坏性和迭代性:
mydict.itervalues().next()
如果你想让它在python2和python3中都能工作,你可以使用six包:
six.next(six.itervalues(mydict))
虽然在这一点上,它是相当神秘的,我更喜欢你的代码。
如果你想删除任何项目,请执行以下操作:
key, value = mydict.popitem()
请注意,“first”在这里可能不是一个合适的术语,因为dict在Python < 3.6中不是有序类型。Python 3.6+字典是有序的。
这个怎么样。这里还没有提到。
Py 2和Py 3
a = {"a":2,"b":3}
a[list(a)[0]] # the first element is here
>>> 2
没有外部库,适用于Python 2.7和3.x:
>>> list(set({"a":1, "b": 2}.values()))[0]
1
对于任意键,省略.values()
>>> list(set({"a":1, "b": 2}))[0]
'a'
子类化字典是一种方法,但效率不高。这里如果你提供一个整数,它将返回d[list(d)[n]],否则按预期访问字典:
class mydict(dict):
def __getitem__(self, value):
if isinstance(value, int):
return self.get(list(self)[value])
else:
return self.get(value)
d = mydict({'a': 'hello', 'b': 'this', 'c': 'is', 'd': 'a',
'e': 'test', 'f': 'dictionary', 'g': 'testing'})
d[0] # 'hello'
d[1] # 'this'
d['c'] # 'is'