如何替换给定词典中的项目?

时间:2019-02-03 20:16:48

标签: python-3.x dictionary

我是python的新手。我当时在玩字典,想知道给定问题的解决方法

list_ = [['any', 'window', 'says', 'window'], ['dog', 'great'], ['after', 'end', 'explains', 'income', '.', '?']] 

dictionary=[('dog', 'cat'), ('window', 'any')]

def replace_matched_items(word_list, dictionary):
    int_word = []
    int_wordf = []
    for lst in word_list:
        for ind, item in enumerate(lst):
            for key,value in dictionary:
                if item in key:
                    lst[ind] = key 
                else:
                    lst[ind] = "NA"
        int_word.append(lst)
    int_wordf.append(int_word)
    return int_wordf
list_ = replace_matched_items(list_, dictionary)
print(list_ )

生成的输出是:

[[['NA', 'window', 'NA', 'window'], ['NA', 'NA'], ['NA', 'NA', 'NA', 'NA', 'NA', 'NA']]]

预期输出为:

 [[['NA', 'window', 'NA', 'window'], ['dog', 'NA'], ['NA', 'NA', 'NA', 'NA', 'NA', 'NA']]]

我正在使用python 3 预先感谢

1 个答案:

答案 0 :(得分:0)

对python中的数据结构进行一些快速介绍,只是为了阐明您的问题。

  • 列表与您的数组相似,可以通过它们的索引对其进行访问,并且它们是可变的,这意味着可以更改列表中的项目。列表通常用括号 []标识。 例如:
my_array = [4, 8, 16, 32]
print(my_array[0]) # returns 4
print(my_array[3]) # returns 32

my_array[2] = 0
print(my_array) # returns [4, 8, 0, 32]
  • 元组与列表相似,但是主要区别在于它们不可变,这意味着不能更改元组中的项。仍然可以通过其索引访问项目。它们通常用括号()标识。 例如:
my_tuple = ('this', 'is', 'a', 'tuple', 'of', 'strings')
print(my_tuple[0]) # returns 'this'
my_tuple[1] = 'word' # throws a 'TypeError' as items within tuples cannot be changed.
  • 词典使用键和值对来访问,存储和更改字典中的数据。与列表类似,它们是可变,但是,每个值都有其自己的唯一键。要访问字典中的值,您必须在字典中传递键。字典通常用花括号 {}标识。 例如:
my_dictionary = {'John':13, 'Bob':31, 'Kelly':24, 'Ryan':17}
print(my_dictionary['Kelly']) # Returns 24

my_dictionary['Kelly'] = 56 # Assigns 56 to Kelly
print(my_dictionary['Kelly']) # Returns 56

键:值在字典中采用这种形式,随后的每个键/值对均以逗号分隔。

我强烈建议阅读有关可用于python的数据结构的官方文档:Link Here


回答问题

从给出的代码中,您已经使用了元组,并且键值对将元组封装在列表中作为字典数据结构。

您的预期输出是您遍历整个字典的结果,并且在您找到字典的密钥后并没有处理将要发生的事情。找到密钥后,可以通过在if语句中添加 break 语句来解决此问题。 break 语句将在找到密钥后退出for循环,并继续到下一个列表项。

您的函数最终看起来像:

def replace_matched_items(word_list, dictionary):
    int_word = []
    int_wordf = []
    for lst in word_list:
        for ind, item in enumerate(lst):
            for key,value in dictionary:
                if item in key:
                    lst[ind] = key
                    break
                else:
                    lst[ind] = "NA"
        int_word.append(lst)
    int_wordf.append(int_word)
    return int_wordf

建议使用字典

为键和值对使用Dictionary数据结构将使您可以访问一些方法,这些方法可让您检查字典中是否存在键。

如果您有一个键列表,并且想要检查列表中是否存在字典键:

this_list = ['any', 'window', 'says', 'window', 'dog', 
'great', 'after', 'end', 'explains', 'income', '.', '?']

dictionary = {'dog':'cat', 'window':'any'}

matched_list = []
for keys in dictionary:
    if keys in this_list:
        matched_list.append(keys) # adds keys that are matched 
    else:
        # do something if the key is in not the dictionary

print(matched_list)
# Returns ['dog', 'window']