列表中每个元组的第一个元素与字母字符之间的高效映射

时间:2017-01-07 10:37:56

标签: python list python-3.x dictionary tuples

我有一个字符串元组列表:

lst = [('first', 'one'), ('second', 'two'), ('third', 'three'), ('fourth', 'four')]

我想在每个元组的第一个元素和英文字母小写字符之间创建一个映射:

  • 'first'已映射到'a'
  • 'second'已映射到'b'
  • 'third'已映射到'c'
  • 'fourth'已映射到'd'

我试过字典

dct = {'first': 'a', 'second': 'b', 'third': 'c', 'fourth': 'd'}

但我想知道是否有更有效的方法可以创建包含元组的第一个元素和字母表列表的列表,然后迭代它们来创建字典。

此外,对于字母字符,我尝试使用string.ascii_lowercase,但它不会将字符串作为每个字符的列表。

如果上面的问题是基本的话,我是Python的新手。我很感激任何示例代码供我理解和学习。

4 个答案:

答案 0 :(得分:2)

您可以使用zip()和字典comprehension

>>> from string import ascii_lowercase
>>> lst = [('first', 'one'), ('second', 'two'), ('third', 'three'), ('fourth', 'four')]
>>> {x[0]: y for x, y in zip(lst, ascii_lowercase)}
{'first': 'a', 'second': 'b', 'third': 'c', 'fourth': 'd'}

或者如果你想在一个更实用的功能中做到这一点。方式:

>>> from operator import itemgetter
>>> {x: y for x, y in zip(map(itemgetter(0), lst), ascii_lowercase)}
{'first': 'a', 'second': 'b', 'third': 'c', 'fourth': 'd'}

答案 1 :(得分:1)

当然,您可以使用字典理解并使用string库来实现这一目标:

from string import ascii_lowercase

{lst[i][0]: c for i, c in enumerate(ascii_lowercase)}

答案 2 :(得分:1)

您可以使用zip创建所需的dict

from string import ascii_lowercase
lst = [('first', 'one'), ('second', 'two'), ('third', 'three'), ('fourth', 'four')]

my_dict =  dict(zip(list(zip(*lst))[0], ascii_lowercase)) # in python 3
# In python 2, you may just do:
#     my_dict = dict(zip(zip(*lst)[0], ascii_lowercase))

或者,甚至更好地将其与operator.itemgetter一起使用:

my_dict = dict(zip(map(itemgetter(0), lst), ascii_lowercase))

my_dict保留的值为:

{'first': 'a', 'second': 'b', 'third': 'c', 'fourth': 'd'} 

<强>解释

你快到了。 string.ascii_lowercase返回一个字符串,但您可以迭代该字符串并根据索引访问该项目(与您对list相同)。例如:

my_alphas = string.ascii_lowercase

# Iterate the string, valid
for alpha in my_alphas:
    print alpha

# access based on index, valid
my_alphas[13]

即使您不需要,也可以作为补充信息:如果您想将string转换为list,您可以输入它为:

my_alpha_list = list(string.ascii_lowercase)
#  ^  will hold all the alphabets in the form of list

答案 3 :(得分:1)

import string 
lst = [('first', 'one'), ('second', 'two'), ('third', 'three'), ('fourth', 'four')]
alphabetList = [i for i in string.ascii_lowercase ]
dic = {lst[i] : alphabetList[i] for i in range(len(lst))}
print(dic)