如何获得字典键和值

时间:2018-07-25 05:51:54

标签: python python-3.x dictionary

想象一下我有一个dict,像这样:

d = {'key': 'value'}

dict仅包含一个键值。 我正在尝试从此key中获取dict,我尝试了d.keys()[0],但它返回了IndexError,我尝试了此:

list(d.keys())[0]

它工作得很好,但是我认为这不是一个好方法,因为它会创建一个新列表,然后获取第一个索引。
有一个更好的方法吗?我也想获得value

3 个答案:

答案 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处于无序状态,将它们编入索引(或获得第一个/最后一个)毫无意义。