通过dict迭代并对每个值应用多个方法

时间:2017-04-17 14:37:57

标签: python dictionary

我想取字典的值将方法应用于每个值,然后将这些新值添加到不同的字典中。类似的东西:

d = {0:'a', 1:'b', 2:'c'}

def somefunction(d):
    for value in d:
        value.somemethod
        value.anothermethod
        value.onemoremethod
        newdict = {0:value(result value of all 3 methods applied concanated together, 1:value(result value of all 3 methods applied concanated together), 2:value(you get the idea)

dict值的类型为<class 'bs4.element.ResultSet'>,我想将.contents[]方法应用于每个值,并将它们保存为新值的新值。

2 个答案:

答案 0 :(得分:1)

您可以使用词典理解

newdict = {k: (v.somemethod(),v.anothermethod(),v.onemoremethod())
           for k,v d.items()}

所以在这里你构建一个新的字典,其中原始键映射在3元组上,其中包含对该值的三个方法调用的输出。

例如,如果方法为.isdigit().isalpha().upper(),则结果为:

>>> {k: (v.isdigit(),v.isalpha(),v.upper()) for k,v in d.items()}
{0: (False, True, 'A'), 1: (False, True, 'B'), 2: (False, True, 'C')}

答案 1 :(得分:1)

您尝试迭代字典的方式不正确,如果您尝试从结果中创建新字典,则需要在迭代时将其添加到字典中并将其声明为你的循环。

如果您正在使用Python 2.x,则使用以下内容迭代字典:

for key, value in d.iteritems():
  ...

和3.x中:

for key, value in d.items():
  ...

如果我理解你想要的结果,你应该采取以下措施:

newDict = {k: '{}{}{}'.format(v.somemethod(), v.anothermethod(), v.onemoremethod()) for k, v in d.items()}

以便将每个方法的结果值连接在一起作为键的单个值。