查找由dict.get

时间:2018-08-03 04:04:48

标签: python python-3.x

我有一个字典,其值都是列表,我需要为给定键提取列表的第一个元素。

我一直在使用

var = varDict.get(key, 0)

但是现在值是一个列表,我需要与值相同的var,它现在是列表的第一个元素。

我尝试了几种变体,主要涉及将方括号放在不同位置的方括号中,其中的数字不同,我的尝试是切片符号,然后以标准方式将其从列表中拉出,所有这些均导致dict.get返回每次都默认,或者什么都不做。

从研究看来,这似乎并不是人们真正遇到的问题,我尝试了一些类似问题的答案,但没有一个能与这种元素组合一起起作用。

我也可以通过添加if语句并将其扩展很多来做到这一点,但是只要有一种内置的方式(我认为是这样),我就更喜欢保持代码的简洁和实用。


某些上下文

在这种特殊情况下,我的代码的完整片段是:

varDict[key] = [vardict.get(key, 0) + step,item2,item3]

您可能会在这里看到,我的目标是递增(或递减,取决于步长的值)列表中的int /与键关联的值,覆盖列表的其他两个值,以及如果还不存在,则创建密钥。


一些例子

根据Moondra的要求,以下是一些预期输出的示例:

varDict作为空字典:

key = "test", step = 1, item2 = True, item3 = False

应导致:

varDict = {"test": [1, True, False]}

然后:

key = "test", step = 1, item2 = False, item3 = False

结果:

varDict = {"test": [2, False, False]}

然后:

key = "words", step = -1, item2 = False, item3 = False

结果:

varDict = {"test": [2, False, False], "words": [-1, False, False]}

但是我想指出的是,我在寻找问题的答案,而不是我的处境,因为回答我的问题可能会对发现并有相同问题的其他人有所帮助,而我的处境非常具体对我来说这个问题的答案应该可以帮助我解决我的情况。我想是因为我是低代表用户,所以人们认为我只是想解决我的问题(根据最近一些元文章中的吸血鬼评论),但是我只是低代表,因为我没有足够的经验来回答其他人问题和我的大多数问题都已经得到了解答,有效地限制了我赢得代表的方式。我在这个社区工作已经有好几年了,并且知道它是如何工作的,我只是无法回馈我想。我绝不打算从这个社区中抽水,而在这里我要简短一些,因为本来只是“回答问题,不解决我的情况”的内容已经扩展到了可能会出现问题的地方闭门造车,或者实际上不是一个问题,而是一个麻烦,但希望至少有一些人会首先注意到它。 编辑:我也很有趣,这与this meta post同时发生。对于我来说,这将是一个更好的地方,我会把它移到那里,并附带一个巧合,即我也终于获得了足够的代表来获得特权“参加meta”,但是花费了很多时间。我读了那个元文章,我失去了两个代表,使我无法参加比赛,所以在这里我再次将不相关的信息添加到错误的位置,因为即使现在已经有一个帖子对我来说很完美,我仍然被排除在外。

2 个答案:

答案 0 :(得分:0)

如果您试图构建一个新字典,其中值是列表字典的列表的第一个值,则可以使用理解。

NSMutableSet

这会循环访问字典中的项目,并使用相同的键创建一个新字典,其中相关值是原始词典列表中的第一个元素。

答案 1 :(得分:0)

如果我了解您的问题:

您有一些代码可以填充列表的第一个元素:

[var[0] + step, item2, item3]

…并且您在dict中有这些列表,因此您可以执行以下操作:

var = varDict[key]
[var[0] + step, item2, item3]

…但是缺少某些键,因此您需要一个默认值,因此您可以这样做:

var = varDict.get(key, 0)

…但这不起作用,因为0显然没有第一个元素。您需要的是确实具有第一个元素,并且该第一个元素应为0。

那只是一个包含0的列表:

var = varDict.get(key, [0])

就是这样。


将所有内容放在一起,我认为您可能想写的行是:

varDict[key] = [varDict.get(key, [0])[0], item2, item3]

但是,我认为将其保留为两行可能更可读:

var = varDict.get(key, [0])
varDict[key] = [var[0], item2, item3]

…或者您可能实际上希望varDict成为defaultdict

from collections import defaultdict

varDict = defaultdict(lambda: [0])
# ...
varDict[key][:] = [varDict[key][0]+step, item2, item3]