元组和dict to list以及元素修改

2024-04-28 03:44:45 发布

您现在位置:Python中文网/ 问答频道 /正文

给定如下所示的元组

tpl = ('abc', {'a': 1, 'b': 2})

需要创建一个列表,最好是通过理解,如果可能的话

预期产量

['abc', 'a: 1', 'b: 2']

元组可以通过调用列表(tpl)转换为列表

dictkey:val转换为key+" : "+val的部分可以通过如下方式完成

[k + " : " + v for k, v in dict.items()]

我认为有选择地调用上述操作的部分可以通过检查类型(仅适用于dict)来完成,需要一些帮助才能获得完整的解决方案

另外,作为一个单独的问题,是否有一种方法可以做到这一点


Tags: keyin类型列表for方式itemsval
3条回答

使用列表理解的解决方案

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']

另一种可能是使用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']

为了准确地解决这个问题,您必须处理元组中包含的特定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']

相关问题 更多 >