在Python中访问字典中的任意元素

时间:2010-06-22 23:24:02

标签: python dictionary

如果mydict不为空,我将访问任意元素:

mydict[mydict.keys()[0]]

有没有更好的方法呢?

15 个答案:

答案 0 :(得分:512)

在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不是有序类型。

答案 1 :(得分:118)

如果您只需要访问一个元素(第一个是偶然的,因为dicts不保证排序),您只需在 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不保证对这些方法中的任何一个的连续两次调用将返回具有相同排序的列表。 Python3不支持此功能。

答案 2 :(得分:51)

在python3中,方式:

dict.keys() 

返回类型中的值:dict_keys(),这样得到dict键的第一个成员时会出错:

dict.keys()[0]
TypeError: 'dict_keys' object does not support indexing

最后,我将dict.keys()转换为list @ 1st,并通过list splice方法获得第一个成员:

list(dict.keys())[0]

答案 3 :(得分:24)

获取密钥

next(iter(mydict))

获取值

next(iter(mydict.values()))

同时获得

next(iter(mydict.items())) # or next(iter(mydict.viewitems())) in python 2

前两个是Python 2和3.最后两个在Python 3中是懒惰的,但在Python 2中不是。

答案 4 :(得分:16)

正如其他人提到的,没有“第一项”,因为字典没有保证的顺序(它们被实现为哈希表)。例如,如果您想要与最小键对应的值,thedict[min(thedict)]将执行该操作。如果您关心密钥的插入顺序,即“first”表示“最早插入”,那么在Python 3.1中,您可以使用collections.OrderedDict,这也是即将发布的Python 2.7;对于旧版本的Python,请下载,安装和使用有序的dict backport(2.4及更高版本),您可以找到here

Python 3.7 Now dicts是有序插入的。

答案 5 :(得分:13)

怎么样,这个。这里还没有提到。

py 2& 3

a = {"a":2,"b":3}
a[list(a)[0]] # the first element is here
>>> 2

答案 6 :(得分:11)

忽略围绕dict排序的问题,这可能会更好:

next(dict.itervalues())

这样我们就可以避免项目查找并生成我们不使用的密钥列表。

Python3

next(iter(dict.values()))

答案 7 :(得分:8)

在python3中

list(dict.values())[0]

答案 8 :(得分:3)

你总是可以这样做:

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())

请注意,字典在打印时会进行排序。但是密钥集本质上是一个hashmap!

答案 9 :(得分:3)

对于Python 2和3:

import six

six.next(six.itervalues(d))

答案 10 :(得分:2)

python3的最简单方法:

list(dict.keys())[0]

答案 11 :(得分:2)

根据@alldayremix的评论更新@swK的答案:

在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

答案 12 :(得分:1)

没有外部库,适用于Python 2.7和3.x:

>>> list(set({"a":1, "b": 2}.values()))[0]
1

对于aribtrary键,请忽略.values()

>>> list(set({"a":1, "b": 2}))[0]
'a'

答案 13 :(得分:1)

first_key, *rest_keys = mydict

答案 14 :(得分:0)

子类化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'