【问题标题】:Trying to keep duplicates while making a dictionary在制作字典时尝试保留重复项
【发布时间】:2017-07-01 15:15:26
【问题描述】:
word = 'EVAPORATE'
lettersWord = list(word)
d = {}
for elem in lettersWord:
       d[elem] = '_'
print(d)

这会返回:

{'E': '_', 'V': '_', 'A': '_', 'P': '_', 'O': '_', 'R': '_', 'T': '_'}

虽然我希望它返回的是:

{'E': '_', 'V': '_', 'A': '_', 'P': '_', 'O': '_', 'R': '_', 'A': '_', 'T': '_', 'E': '_'}

感谢您的帮助!

【问题讨论】:

  • 你不能。字典的键必须是唯一的。
  • 使用 defaultdict 函数。也可以看看link
  • 在这种情况下,字典不是正确的结构(d['E'] 是什么意思?)要么使用多重集(如 collections.Counter),要么使用列表 [('E', '_'), ('V', '_'), ...]

标签: python list dictionary for-loop


【解决方案1】:

创建重复键值的列表:

from collections import defaultdict

word = 'EVAPORATE'

d = defaultdict(list)

for i in word:
    d[i].append("_")

输出:

{'A': ['_', '_'], 'E': ['_', '_'], 'O': ['_'], 'P': ['_'], 'R': ['_'], 'T': ['_'], 'V': ['_']}

【讨论】:

  • 谢谢,帮了大忙!
【解决方案2】:

字典的键必须是唯一的,所以不能有重复。在这种情况下,使键唯一的一种方法是使它们成为 tuple ,其中包含字母及其相应的字符串索引。

这就是我的意思:

from pprint import pprint

word = 'EVAPORATE'
d = {}

for (i, letter) in enumerate(word):
       d[i, letter] = '_'

pprint(d)

输出:

{(0, 'E'): '_',
 (1, 'V'): '_',
 (2, 'A'): '_',
 (3, 'P'): '_',
 (4, 'O'): '_',
 (5, 'R'): '_',
 (6, 'A'): '_',
 (7, 'T'): '_',
 (8, 'E'): '_'}

【讨论】:

  • 不是我想要的,但还是很有帮助的!
  • GauravG.:也请注意,索引和字母可以在元组中以相反的顺序放置——以最方便的为准。
【解决方案3】:

如果你想使用某种类型的列表数据结构,你可以试试二维数组

或者,如果您可以使用字符串来显示您的输出,您也可以这样做

二维数组实现

word = 'EVAPORATE'
lettersWord = list(word)
d = []
for elem in range(len(lettersWord)):
   d.append([])       #here we make our sublist
   d[elem].append(lettersWord[elem])    #here we append the current character of lettersWord to the current sublist
   d[elem].append('_')      #here we append the underscore as our marker


for i in d:
  print(i)
字符串实现
ourString = ''

for i in word:
  ourString += i+' : _ \n'  #here we append our : _ and a newline as our marker



print(ourString) 

输出 #1:

 ['E', '_']
 ['V', '_']
 ['A', '_']
 ['P', '_']
 ['O', '_']
 ['R', '_']
 ['A', '_']
 ['T', '_']
 ['E', '_']

输出#2

  E : _ 
  V : _ 
  A : _ 
  P : _ 
  O : _ 
  R : _ 
  A : _ 
  T : _ 
  E : _ 

希望这会有所帮助!

【讨论】:

  • 绝对做到了!
猜你喜欢
  • 1970-01-01
  • 2020-05-06
  • 2017-05-27
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 2014-09-04
  • 2019-06-05
  • 2017-10-31
相关资源
最近更新 更多