如果a mydict
不为空,则访问以下任意元素:
mydict[mydict.keys()[0]]
有什么更好的方法吗?
list(mydict.keys())[0]
。
如果a mydict
不为空,则访问以下任意元素:
mydict[mydict.keys()[0]]
有什么更好的方法吗?
list(mydict.keys())[0]
。
Answers:
在Python 3上,非破坏性和迭代性地:
next(iter(mydict.values()))
在Python 2上,非破坏性和迭代性地:
mydict.itervalues().next()
如果希望它在Python 2和3中都可以使用,则可以使用该six
包:
six.next(six.itervalues(mydict))
尽管在这一点上它还是很神秘的,但我还是更喜欢您的代码。
如果要删除任何项目,请执行以下操作:
key, value = mydict.popitem()
请注意,“ first”在此处可能不是合适的术语,因为dict
在Python <3.6中不是有序类型。Python 3.6+ dicts
已订购。
dict.iterkeys().next()
吗
dict.values().__iter__().__next__()
:)
key, value = dict(d).popitem()
如果您只需要访问一个元素(由于字典不能保证排序,则是偶然的第一个元素),您可以在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不保证对这些方法中任何一个的2个连续调用将返回具有相同顺序的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
list(my_dict.keys())[0]
list(my_dict.keys())[0]
不是偷懒吗?
在python3中,方式:
dict.keys()
返回类型为dict_keys()的值,当通过这种方式获得dict的键的第一个成员时,我们将得到一个错误:
dict.keys()[0]
TypeError: 'dict_keys' object does not support indexing
最后,我将dict.keys()转换为列表@ 1st,并通过列表拼接方法获得了第一个成员:
list(dict.keys())[0]
list(dict.values())[0]
。
正如其他人提到的那样,由于字典没有保证的顺序(它们被实现为哈希表),因此没有“第一项”。例如,如果您想要与最小键对应的值,则thedict[min(thedict)]
可以这样做。如果您关心键的插入顺序,即“首先”是指“最早插入”,那么在Python 3.1中,您可以使用collections.OrderedDict,即将在即将发布的Python 2.7中使用;对于旧版本的Python,请下载,安装并使用有序的dict反向移植(2.4及更高版本),您可以在此处找到。
Python 3.7 现在,字典按插入顺序排序。
忽略有关字典排序的问题,这可能会更好:
next(dict.itervalues())
这样,我们避免了项目查找,并生成了我们不使用的键列表。
next(iter(dict.values()))
next(iter(dict.values()))
获得相同的结果而不创建列表。
您可以随时这样做:
for k in sorted(d.keys()):
print d[k]
如果排序对您有任何意义,这将为您提供一致的排序键(关于内置 .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())
请注意,字典在打印时已排序。但是键集本质上是一个哈希图!
对于Python 2和3:
import six
six.next(six.itervalues(d))
Is there any better way to do this?
以简短的方式回答了这个问题。
子类化dict
是一种方法,尽管效率不高。如果您提供整数,它将返回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'