从字符串向字典分配键

时间:2018-10-29 12:33:20

标签: python string dictionary

我有一个名为sentence的字符串:'the sly fox jumped over the brown dog'

我需要创建一个名为Positions的字典。 Positions的键应为sentence中的字符。 这些值应该是这些字符的索引。

例如,所需的输出将是:

{'t':0, 'h':1, 'e':2, ' ':3 ...}

我当然可以手动将其写出,但实际上我被要求将字符串转换为键,而无需手动将其写出。

到目前为止,我刚刚创建了一个空字典,并试图在事件之后为它分配键和值:

Positions = {}

我是从错误的脚开始吗?

3 个答案:

答案 0 :(得分:6)

您可以执行以下操作:

result = {}
s = 'the sly fox jumped over the brown dog'

for i, c in  enumerate(s):
    result.setdefault(c, []).append(i)

print(result)

输出

{'m': [14], 'e': [2, 16, 21, 26], 'v': [20], 's': [4], 'n': [32], 'h': [1, 25], 'w': [31], 'l': [5], 'o': [9, 19, 30, 35], 'x': [10], 'p': [15], 'd': [17, 34], 'g': [36], 't': [0, 24], 'u': [13], 'f': [8], 'y': [6], 'b': [28], 'j': [12], ' ': [3, 7, 11, 18, 23, 27, 33], 'r': [22, 29]}

请注意,上述解决方案考虑了重复字符的情况,并创建了索引列表。

答案 1 :(得分:1)

由于字符可能会在字符串中重复出现,因此我将它们存储为列表

str = "the sly fox jumped over the brown dog"
char_items = list(str) 
dictionary = {}

for index,character in enumerate(char_items): 
    if character not in dictionary.keys():
        dictionary[character] = [] # because same character might be repeated in different positions
    dictionary[character].append(index)

for character,positions in dictionary.items():
    print(character, positions)

答案 2 :(得分:0)

谢谢大家的建议!正如上面Asif所建议的,对我而言,前进的方法是将字符串转换为列表。

我还发现Nick Dunn的“用Python创建字典的三种方法”真的很有用: https://developmentality.wordpress.com/2012/03/30/three-ways-of-creating-dictionaries-in-python/

我使用的三个步骤:

示例问题:“创建一个词典,其键由字母('abcdefghijklmnopqrstuvwxyz')中的字符组成,值由0到26之间的数字组成。 将此存储为位置。”


1)将字母从字符串转换为列表,字符

chars = []
for AtoZ in alphabet:
chars += AtoZ
print(chars)

[' ',
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z']

2)创建另一个名为数字

的列表
numbers = list(range(0,27))
numbers

Out[16]: 
[0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26]

3)从两个列表中创建名为 positions {} 的字典:

positions = {}
positions = dict(zip(chars,numbers))

print(positions)
{'v': 22, 'g': 7, 'w': 23, 'h': 8, 'a': 1, 'm': 13, 'c': 3, 'o': 15, 'd': 4,  's': 19, 'r': 18, 'u': 21, 'j': 10, 't': 20, 'f': 6, 'k': 11, 'y': 25, 'z': 26, 'l': 12, ' ': 0, 'b': 2, 'e': 5, 'q': 17, 'n': 14, 'i': 9, 'p': 16, 'x': 24}

我希望这篇文章可以帮助其他人使用Python将字符串和/或列表转换成字典。