Python 从defaultdict中提取信息
我有一个defaultdict,其中包含数字平均位置的计算(Euler问题) 我试图将这些信息转换成简单的字符串,而不是从0-2手动执行。 我想要的最终结果是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
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)