我有一个嵌套列表:
my_list = ['a','b','c','dog', ['pig','cat'], 'd']
和一个字典:
my_dict = {'dog':'c','pig':'a','cat':'d'}
我想使用dict,这样我得到一个列表:
new_list = ['a', 'b', 'c', 'c', ['a', 'd'], 'd']
我尝试过类似的事情:
new_list = []
for idx1, item1 in enumerate(my_list):
for idx2, item2 in enumerate(item1):
new_list[idx1][idx2] = my_dict[item2]
但item2
中dict
不存在时出错。有更好的方法吗?
答案 0 :(得分:6)
您可以编写一个简单的递归函数,使用列表推导来生成结果。如果列表中的项目是列表,则递归,否则使用带有默认参数的dict.get
转换项目:
SELECT USERNAME,count(coms.C_KEY)
FROM USERS usrs
join COMMENTS coms
on coms.U_KEY = usrs.U_KEY
WHERE coms.C_KEY >= 3
ORDER BY coms.C_KEY DESC;
输出:
my_list = ['a','b','c','dog', ['pig','cat'], 'd']
my_dict = {'dog':'c','pig':'a','cat':'d'}
def convert(l, d):
return [convert(x, d) if isinstance(x, list) else d.get(x, x) for x in l]
print(convert(my_list, my_dict))
答案 1 :(得分:1)
你看,我试图替换成嵌套列表。试试这个函数,这将递归交换你的值:
def replace_vals(_list, my_dict):
new_list = []
for item in _list:
if isinstance(item, list):
new_list.append(replace_vals(item, my_dict))
elif item in my_dict:
new_list.append(my_dict.get(item))
else:
new_list.append(item)
return new_list
print replace_vals(my_list, my_dict)
答案 2 :(得分:0)
my_list = ['a','b','c','dog', ['pig','cat'], 'd']
my_dict = {'dog':'c','pig':'a','cat':'d'}
def replace(item):
if item in my_dict:
return my_dict[item]
else:
return item
new_list=[];
for item in my_list:
if isinstance(item,list):
temp_list=[]
for subitem in item:
temp_list.append(replace(subitem))
new_list.append(temp_list)
else:
new_list.append(replace(item))
print new_list
如果my_list
中的列表本身嵌套,则这段代码将无效。