想象一下我有一个dict
,像这样:
d = {'key': 'value'}
dict
仅包含一个键值。
我正在尝试从此key
中获取dict
,我尝试了d.keys()[0]
,但它返回了IndexError
,我尝试了此:
list(d.keys())[0]
它工作得很好,但是我认为这不是一个好方法,因为它会创建一个新列表,然后获取第一个索引。
有一个更好的方法吗?我也想获得value
。
答案 0 :(得分:1)
如果您知道(或期望)只有一个键/值对,则可以使用拆包来获取键和值。例如。
[item] = d.items()
assert item == ('key', 'value')
您可以更进一步,并解开键/值对。
[[k, v]] = d.items()
assert k == 'key'
assert v == 'value'
当然,如果字典具有多个键/值对,则会引发错误。但这很有用。字典在python 3.7之前是无序的(dict
在CPython 3.6中是有序的,但这是实现细节),因此执行list(d.items())[0]
可能会产生不一致的结果。即使在3.7+版本中,排序也是过度插入,而不是键的任何自然排序,因此您仍然可以获得令人惊讶的结果。
答案 1 :(得分:0)
下面有一些信息可供您参考,但我认为您并不完全了解字典。它们是未排序的,这意味着创建的列表将是随机的,因此索引将返回无法预测的答案。
从Python 3开始,d.keys()不再返回列表,而是返回了不支持索引的字典对象,随后将返回IndexError。不幸的是,您只需要使用list()。
如果该选项可用(即您要遍历列表),则可以执行以下操作:
for item in d.keys():
# Do something
这意味着您不必将其转换为列表。
答案 2 :(得分:0)
您可以这样做很愚蠢:
def silly(d:dict):
for k,v in d.items():
return (k,v) # will only ever return the "first" one
# with 3.7 thats the first inserted one
使用
list(d.items())[0]
至少一次给您 key 和 value (并抛出空的字典)。
从3.7开始,对字典进行“插入排序”,可能会发展一些方法来“获取第一” 或“获取最后” ,但是dict
处于无序状态,将它们编入索引(或获得第一个/最后一个)毫无意义。