Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从defaultdict中提取信息_Python_Defaultdict - Fatal编程技术网

Python 从defaultdict中提取信息

Python 从defaultdict中提取信息,python,defaultdict,Python,Defaultdict,我有一个defaultdict,其中包含数字平均位置的计算(Euler问题) 我试图将这些信息转换成简单的字符串,而不是从0-2手动执行。 我想要的最终结果是 73162890 我不知道有什么好方法可以在不使用很多if-else和for循环的情况下提取它们 在python中有没有简单而好的方法来实现这一点 In [36]: ''.join([key for key, val in sorted(data, key = lambda item: item[1])]) Out[36]: '7316

我有一个defaultdict,其中包含数字平均位置的计算(Euler问题)

我试图将这些信息转换成简单的字符串,而不是从0-2手动执行。 我想要的最终结果是

73162890
我不知道有什么好方法可以在不使用很多if-else和for循环的情况下提取它们

在python中有没有简单而好的方法来实现这一点

In [36]: ''.join([key for key, val in sorted(data, key = lambda item: item[1])])
Out[36]: '73162890'

说明:

根据
数据中每个项目的第二个值

In [37]: sorted(data, key = lambda item: item[1])
Out[37]: 
[('7', 0.0),
 ('3', 0.2222222222222222),
 ('1', 0.6923076923076923),
 ('6', 0.875),
 ('2', 1.0909090909090908),
 ('8', 1.3333333333333333),
 ('9', 1.6923076923076923),
 ('0', 2.0)]
现在,我们可以使用以下方法收集每个项目中的第一个值:

并将这些项目连接到一个字符串中:


如果您的dict是
d
,则
items=d。items()
会像您一样为您提供一个配对列表。获得此列表后,可以按第二个元素对其进行排序:

ordered = sorted(items, key=lambda (_, value): value) # Not Python 3

# or,
ordered = sorted(items, key=lambda x: x[1])

# or,
import operator
ordered = sorted(items, key=operator.itemgetter(1))
一旦我们将列表按顺序排序,我们只需要从每个列表中提取字符串,并将它们粘在一起:

result = ''.join(string for (string, _) in ordered)

(请注意,我调用的是未使用的参数
,Python程序中的

没有什么特别之处。)

您是否试图将它们按顺序排列?是的,我希望7排在第一位,因为它的值最低(0.0)例如,等等。我从未见过元组在
lambda
表达式中的冒号lhs上解包。。。或者在一个函数中。谁知道
def func((a,b),c):…
实际上是有效的语法?每天学习新的东西…@mgilson这是一种学习,所以不要太习惯它。:)@Dougal--我真的想不出任何真正好的用例,所以我不打算开始。。。不过它还是有点漂亮。我在这里使用了这个“ordered=sorted(items,key=lambda x:x[1]),并写下来供将来使用:)很好的解释…但是为什么要编写一个显式lambda来完成内置
操作符的工作。itemgetter
?@abarnert:lambda更显式(正如您所指出的!),更易于阅读,速度也不会慢很多。不过这是个人的偏好,只要记住Guido讨厌
lambda
,而TOOWTDI是Python哲学的核心部分。所以有一天,他会把它拿走,你必须重写所有你根据个人喜好而不是他的喜好编写的代码。
In [39]: ''.join([key for key, val in sorted(data, key = lambda item: item[1])])
Out[39]: '73162890'
ordered = sorted(items, key=lambda (_, value): value) # Not Python 3

# or,
ordered = sorted(items, key=lambda x: x[1])

# or,
import operator
ordered = sorted(items, key=operator.itemgetter(1))
result = ''.join(string for (string, _) in ordered)