我有字典和列表:
dict = {'a':0, 'b':1, 'c':2}
data = [2, 0, 5, 1, 0]
然后我想以下列方式转换列表中的数据。
如果data[i]%3 == 0
然后data[i] ='a'
,
如果data[i]%3 == 1
然后data[i] ='b'
,
如果data[i]%3 == 2
然后data[i] ='c'
。
它应该给予什么:
data2 = ['cacba']
有少量条件,没有问题,但如何将其自动化并链接到字典,例如在字典中使用100个值?
答案 0 :(得分:4)
你可以试试这个:
dict = {'a':0, 'b':1, 'c':2}
new_dict = {b:a for a, b in dict.items()}
data = [2, 0, 5, 1, 0]
final_data = [''.join([new_dict[a%3] for a in data])]
输出:
['cacba']
答案 1 :(得分:1)
您可以采取以下方法来解决问题中出现的问题:
#! /usr/bin/env python3
import operator
def main():
dict = {'a': 0, 'b': 1, 'c': 2}
data = [2, 0, 5, 1, 0]
table = ''.join(map(
operator.itemgetter(0),
sorted(dict.items(), key=operator.itemgetter(1))
))
size = len(dict)
data2 = [''.join(table[i % size] for i in data)]
print(f'data2 = {data2}')
if __name__ == '__main__':
main()
如果初始dict
和data
变量具有某些约束条件,则它们的大小无关紧要。
答案 2 :(得分:1)
像这样创建方法;
def get_letter(number){
if number%3 == 0:
data[i] ='a'
if number%3 == 1:
data[i] ='b'
if number%3 == 2:
data[i] ='c'
}
并调用main函数;
data = [2, 0, 5, 1, 0]
data2 = []
for i in range (len(data)):
data2.append(get_letter(data[i]));
print data2;
答案 3 :(得分:1)
如果你使用这样的字典会更好:
dict = {0: 'a', 1: 'b', 2: 'c'}
然后,您只需要将一个简单的函数映射到列表中:
result = [''.join(map(lambda x: dict[x % 3], data))]
如果您仍然需要使用该词典,则可以将其撤消
rev_dict = {val: key for key, val in dict.items()}
result = [''.join(map(lambda x: rev_dict[x % 3], data))]
修改:您要求的结果是一个列表