如何使用字典从列表中转换值

时间:2017-12-15 14:11:16

标签: python python-3.x list dictionary

我有字典和列表:

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个值?

4 个答案:

答案 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()

如果初始dictdata变量具有某些约束条件,则它们的大小无关紧要。

答案 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))]

修改:您要求的结果是一个列表