sla*_*goy 128 python dictionary
我想让我的程序"banana"从字典中打印出来.最简单的方法是什么?
请注意,我并不是试图让我的程序打印出与之相关的值"banana",而是打印出"banana"一个for循环,所以当我运行它时,每个键也会打印出来.
这是我的字典:
prices = {
"banana" : 4,
"apple" : 2,
"orange" : 1.5,
"pear" : 3
}
Run Code Online (Sandbox Code Playgroud)
max*_*lec 197
如果您只需要字典中的一个键,这可能是最短的Python 2和3有效代码:
my_dict = {'foo': 'bar'}
next(iter(my_dict)) # outputs 'foo'
Run Code Online (Sandbox Code Playgroud)
yln*_*nor 85
字典没有编入索引,但它以某种方式排序.以下将为您提供第一个现有密钥:
list(my_dict.keys())[0]
Run Code Online (Sandbox Code Playgroud)
Rya*_*ing 33
如果你在谈论常规dict,那么"第一把钥匙"并不意味着什么.钥匙不以您可以依赖的任何方式订购.如果你迭代你,dict你可能不会"banana"像你看到的那样.
如果你需要保持秩序,那么你必须使用一个OrderedDict而不仅仅是一个普通的字典.
import collections
prices = collections.OrderedDict([
("banana", 4),
("apple", 2),
("orange", 1.5),
("pear", 3),
])
Run Code Online (Sandbox Code Playgroud)
如果你想要按顺序查看所有键,可以通过迭代来完成
for k in prices:
print(k)
Run Code Online (Sandbox Code Playgroud)
您可以,或者将所有键放入列表中,然后使用它
ks = list(prices)
print(ks[0]) # will print "banana"
Run Code Online (Sandbox Code Playgroud)
获取第一个元素而不创建列表的更快方法是调用next迭代器.在尝试获取nth元素时,这并不能很好地概括
>>> next(iter(prices))
'banana'
Run Code Online (Sandbox Code Playgroud)
wih*_*lke 24
如果你只想要字典中的第一个键,你应该使用许多人之前建议的
first = next(iter(prices))
Run Code Online (Sandbox Code Playgroud)
但是,如果您想要第一个并将其余部分保留为列表,则可以使用值解包运算符
first, *rest = prices
Run Code Online (Sandbox Code Playgroud)
这同样适用于价值被替换prices用prices.values()和两个键和值,你甚至可以使用拆包作业
>>> (product, price), *rest = prices.items()
>>> product
'banana'
>>> price
4
Run Code Online (Sandbox Code Playgroud)
注意:您可能很想使用
first, *_ = prices只获取第一个键,但我通常建议不要使用这种用法,除非字典非常短,因为它会遍历所有键并为它创建一个列表rest有一些开销。
注意:正如其他人提到的,插入顺序是从python 3.7(或技术上 3.6)及更高版本中保留的,而早期的实现应被视为未定义的顺序。
Shi*_*hah 17
对于下面的Python 3,消除了列表转换的开销:
first = next(iter(prices.values()))
Run Code Online (Sandbox Code Playgroud)
小智 10
的dict类型是无序的映射,所以有作为"第一"元件这样的东西.
你想要的可能是什么collections.OrderedDict.
因此,我在尝试优化某个东西以获取已知长度为1的字典中的唯一键并仅返回键时找到了此页面。对于我尝试过的最大尺寸为700的所有字典,以下过程是最快的。
我尝试了7种不同的方法,发现这是我使用Python 3.6的2014 Macbook上最好的方法:
def first_5():
for key in biased_dict:
return key
Run Code Online (Sandbox Code Playgroud)
对它们进行概要分析的结果是:
2226460 / s with first_1
1905620 / s with first_2
1994654 / s with first_3
1777946 / s with first_4
3681252 / s with first_5
2829067 / s with first_6
2600622 / s with first_7
Run Code Online (Sandbox Code Playgroud)
我尝试过的所有方法都在这里:
def first_1():
return next(iter(biased_dict))
def first_2():
return list(biased_dict)[0]
def first_3():
return next(iter(biased_dict.keys()))
def first_4():
return list(biased_dict.keys())[0]
def first_5():
for key in biased_dict:
return key
def first_6():
for key in biased_dict.keys():
return key
def first_7():
for key, v in biased_dict.items():
return key
Run Code Online (Sandbox Code Playgroud)
小智 5
那么简单,根据我的答案将是
first = list(prices)[0]
将字典转换为列表将输出键,我们将从列表中选择第一个键。
假设您要打印第一个密钥:
print(list(prices.keys())[0])
Run Code Online (Sandbox Code Playgroud)
如果你想打印第一个键的值:
print(prices[list(prices.keys())[0]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
225808 次 |
| 最近记录: |