【问题标题】:Replacing character in a list with keys from a dictionary of lists用列表字典中的键替换列表中的字符
【发布时间】:2022-11-24 01:40:16
【问题描述】:

我有一本包含列表的字典

char_code = {'1':['b','f','v','p'],'2':['c','g','j','k','q','s','x','z'], '3':['d','t'], '4':['l'],'5':['m','n'], '6':['r']}

我有另一个包含字符的列表

word_list = ['r', 'v', 'p', 'c']

我想用字典中的键替换 word_list 中的字母,这样它就应该变成

['6', '1', '1', '2']

我试过类似的东西

word_list[:]=[char_code.get(e,'') for e in word_list]

【问题讨论】:

  • 你试过什么?
  • @AlwaysSunny 添加到问题中
  • 用您自己的话说:当您创建 word_list 时,您希望逻辑以哪种方式工作:您是否采用类似 'r' 的值并查找相应的 '1'?或者你带上'1'然后查找'r'?因此,将其用作钥匙查找字典?这是否让您知道如何开始解决问题?

标签: python


【解决方案1】:

首先,invert the dictionary,以便您可以轻松查找给定字母的数字符号:

num_code = {
    letter: digit
    for digit, letters in char_code.items()
    for letter in letters
}

然后简单地use that lookup to do the mapping

word_list[:] = [num_code[letter] for letter in word_list]

这给了我们预期的结果。

【讨论】:

    【解决方案2】:

    一种使用 for 循环执行此操作的方法词汇表并使用list comprehension 查找其中的每个列表元素字符代码dictionary and finallyappend` 这样的键-

    char_code = {'1':['b','f','v','p'],'2':['c','g','j','k','q','s','x','z'], '3':['d','t'], '4':['l'],'5':['m','n'], '6':['r']}
    
    word_list = ['r', 'v', 'p', 'c']
    expected_list = []
    for word in word_list:
        expected_list.append([k for k, v in char_code.items() if word in v][0])
    print(expected_list)
    

    输出:

    ['6', '1', '1', '2']
    

    【讨论】:

      【解决方案3】:

      您的字典的结构无法有效地进行您要求的那种查找 - 它是“由内而外”的。你能够这样做,但它很笨拙。您希望密钥是一个字母,它的值是代码,但您有其他方法。

      转换你的字典,它会简化你的列表创建:

      >>> letter_to_code = {letter: code for code, lst in char_code.items() for letter in lst}
      >>> [letter_to_code[letter] for letter in word_list]
      ['6', '1', '1', '2']
      

      【讨论】:

      • 我想你会发现我用这种方法打败了你:)
      • @KarlKnechtel 不是一个非常有建设性(或准确)的评论......
      猜你喜欢
      • 1970-01-01
      • 2022-08-17
      • 2021-01-02
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 2018-03-08
      相关资源
      最近更新 更多