我怎样才能把它转换成列表理解
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}
将字典 x
和 y
合并为一个新字典 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>)
我有一个字典,我需要在其中使用另一个字典中的键附加新值,尽管我使 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}
将字典x
和y
合并为一个新字典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>)