元组与 dict 列出元素修改
tuple with dict to list with element modification
给出如下元组,
tpl = ('abc', {'a': 1, 'b': 2})
如果可能的话,最好通过理解来创建一个列表。
预期输出
['abc', 'a: 1', 'b: 2']
元组可以通过调用list(tpl)转换为列表
dict key:val
转换为 key
+ " : "
+ val
的部分可以通过下面的方式完成
[k + " : " + v for k, v in dict.items()]
我认为选择性调用上述操作的部分是通过检查类型(仅适用于 dict)来完成的——需要一些帮助才能获得完整的解决方案。
同样作为一个单独的问题,有没有办法就地执行此操作?
要准确解决此问题,您必须注意元组中包含的特定 dtypes
并单独处理它们。所以使用 isinstance
并用相应的逻辑附加元素。对于共享示例,应该执行类似以下操作:
l= []
for i in tpl:
if isinstance(i, str):
l.append(i)
elif isinstance(i, dict):
for k,v in i.items():
l.append(f'{k}: {str(v)}')
print(l)
# ['abc', 'a: 1', 'b: 2']
另一种可能是使用 filter
,如下所示:
tpl = ('abc', {'a': 1, 'b': 2})
iter = filter(lambda d: type(d) == dict , list(tpl))
sol = list(filter(lambda d: type(d) != dict , list(tpl)))
for elem in iter:
for k, v in elem.items():
sol.append("{:}: {:}".format(k, v))
print(sol)
#['abc', 'a: 1', 'b: 2']
使用列表理解的解决方案。
tpl = ('abc', {'a': 1, 'b': 2})
answer = [
x for dict_or_str in tpl for x in
(
[f"{k}: {v}" for k, v in dict_or_str.items()]
if isinstance(dict_or_str, dict)
else [dict_or_str]
)
]
print(answer)
输出
['abc', 'a: 1', 'b: 2']
给出如下元组,
tpl = ('abc', {'a': 1, 'b': 2})
如果可能的话,最好通过理解来创建一个列表。
预期输出
['abc', 'a: 1', 'b: 2']
元组可以通过调用list(tpl)转换为列表
dict key:val
转换为 key
+ " : "
+ val
的部分可以通过下面的方式完成
[k + " : " + v for k, v in dict.items()]
我认为选择性调用上述操作的部分是通过检查类型(仅适用于 dict)来完成的——需要一些帮助才能获得完整的解决方案。
同样作为一个单独的问题,有没有办法就地执行此操作?
要准确解决此问题,您必须注意元组中包含的特定 dtypes
并单独处理它们。所以使用 isinstance
并用相应的逻辑附加元素。对于共享示例,应该执行类似以下操作:
l= []
for i in tpl:
if isinstance(i, str):
l.append(i)
elif isinstance(i, dict):
for k,v in i.items():
l.append(f'{k}: {str(v)}')
print(l)
# ['abc', 'a: 1', 'b: 2']
另一种可能是使用 filter
,如下所示:
tpl = ('abc', {'a': 1, 'b': 2})
iter = filter(lambda d: type(d) == dict , list(tpl))
sol = list(filter(lambda d: type(d) != dict , list(tpl)))
for elem in iter:
for k, v in elem.items():
sol.append("{:}: {:}".format(k, v))
print(sol)
#['abc', 'a: 1', 'b: 2']
使用列表理解的解决方案。
tpl = ('abc', {'a': 1, 'b': 2})
answer = [
x for dict_or_str in tpl for x in
(
[f"{k}: {v}" for k, v in dict_or_str.items()]
if isinstance(dict_or_str, dict)
else [dict_or_str]
)
]
print(answer)
输出
['abc', 'a: 1', 'b: 2']