元组与 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']