我怎样才能把它转换成列表理解

How can I convert this into list comprehension

我有一个字典,我需要在其中使用另一个字典中的键附加新值,尽管我使 for 循环工作,但系统要求我对其进行列表理解。有人可以帮我解决这个问题吗

代码:

for key, value in functionParameters.items():
    if type(value) in [int, float, bool, str]:
       if key not in self.__variables:
          self.__variables[key] = value

任何帮助将不胜感激...

这样检查数组中是否使用了key是不正确的:

if key not in self.__variables: # not correct

如果你这样做 它会检查 key 是否存在 作为 self.__variables[= 中的值16=]

我不知道你这样做的原因!但你可以使用 try & except 来处理它:

for key, value in functionParameters.items():
    if type(value) in [int, float, bool, str]:
       try: 
          if self.__variables[key] is not None:
             self.__variables[key] = value
       except Exception ignored:
             pass

既然要create/update一个dict,就需要用dict comprehension-

self.__variables = {**self.__variables, **{k: v for k, v in functionParameters.items() if type(v) in [int, float, bool, str] and k not in self.__variables}}

解释-

  • z = {**x, **y} 将字典 xy 合并为一个新字典 z.
  • {k: v for k, v in functionParameters.items() if type(v) in [int, float, bool, str] and k not in self.__variables} 模仿您的 for 循环并创建一个新的 dict
  • 我们正在将原来的 self.__variables 字典与上面新创建的字典合并,并将其保存为 self.__variables

这是一个简化的工作示例 -

functionParameters = {"20": 20, "string_val": "test", "float": 12.15, "pre-existing_key": "new-val", "new_type": [12, 12]}
variables = {"old_key": "val", "pre-existing_key": "val"}
variables = {**variables, **{k: v for k, v in functionParameters.items() if type(v) in [int, float, bool, str] and k not in variables}}
print(variables)

打印 -

{'old_key': 'val', 'pre-existing_key': 'val', '20': 20, 'string_val': 'test', 'float': 12.15}

请注意,输出中 pre-existing_key 键的值和缺少 new_type 键,因为相应的值是 list.

你应该为此使用 dict comprehension。代码应该是这样的

self.__variables = {**self.__variables, **{key: value for key, value in functionParameters.items() if type(value) in [int, float, bool, str] and key not in self.__variables}}

您可以更新:

self.__variables.update(<strong>{</strong>
    key: value
    for key, value in functionParameters.items()
    if key not in self.__variables and type(value) in [int, float, bool, str]
<strong>}</strong>)