【问题标题】:How to get a dict key and value [duplicate]如何获取dict键和值[重复]
【发布时间】:2019-01-01 20:17:59
【问题描述】:

想象一下我有一个像这样的dict

d = {'key': 'value'}

dict 只包含一个键值。 我试图从这个dict 得到key,我试过d.keys()[0],但它返回IndexError,我试过这个:

list(d.keys())[0]

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

【问题讨论】:

  • d.items()[0] 返回IndexError.keys() 相同
  • 你说得对。 items() 只是一个 view
  • 对于 Python 3:next(iter(d.values())) Python 2:d.itervalues().next() 对于空字典,您需要进行额外的错误处理(StopIteration 错误)。
  • @mehrdad-pedramfar 好吧,如果大小为 1。但是如果你有一个大的,下一个会快得多。
  • next(iter(d.items())) 将是大型词典的最佳解决方案

标签: python python-3.x dictionary


【解决方案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+ 中,排序是过度插入,而不是键的任何自然排序,因此您仍然可以获得令人惊讶的结果。

【讨论】:

  • 谢谢,我认为这是最好的答案。
【解决方案2】:

你可以用愚蠢的方式做到这一点:

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]

至少一次给你 keyvalue (并抛出空字典)。

随着字典从 3.7 开始“插入排序”,可能会演变出一些方法来“获取第一个”“获取最后一个”,但是这样far dict 是无序的,对它们进行索引(或获取第一个/最后一个)没有意义。

【讨论】:

    【解决方案3】:

    下面有一些信息给你,但我相信你还没有完全理解字典。它们是未排序的,这意味着创建的列表将是随机顺序的,因此索引将返回不可预测的答案。

    从 Python 3 开始,d.keys() 不再返回列表,而是返回不支持索引的字典对象,随后将返回 IndexError。不幸的是,您只需要使用 list()。

    如果该选项可用(即您要循环浏览列表),您可以:

    for item in d.keys():
        # Do something
    

    这意味着您不必将其转换为列表。

    【讨论】:

    猜你喜欢
    • 2012-12-15
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 2011-03-25
    • 2021-05-23
    • 2021-02-26
    • 2021-07-29
    相关资源
    最近更新 更多