多个字典/字符串使if语句不应该通过

时间:2018-07-31 22:10:47

标签: python

标题有点含糊,但我想不出一种在如此短的空间内正确描述我的问题的方法。

我有一个Python(3.x)脚本,用于跟踪用户为自己设置的提醒。

提醒的数据保存在字典条目中,然后存储在元组中(因为PyMySQL将数据库中的数据作为元组拉出)。

当需要删除提醒时,您需要创建一个没有该词典的新元组,因为元组是不可变的。这意味着您使用for循环浏览字典,仅导入与删除的字典不匹配的字典。

这就是我的问题所在。我将下面的代码片段放在下面。

global tReminders
tReminders2 = ()
for dic in tReminders:
    if user_name != dic.get("user_name") and reminder_text != dic.get("reminder_text") and group_name != dic.get("group_name") and set_time != dic.get("set_time") and reminder_time != dic.get("reminder_time"):
        print("ADDING: " + str(dic))
        tReminders2 += (dic,)
    else:
        print("SKIPPING: " + str(dic))
tReminders = tReminders2

例如,初始元组数据为:

({'user_name': 'phil', 'reminder_text': 'test1', 'group_name': 'test', 'set_time': 1533074918, 'reminder_time': 1533074928}, {'user_name': 'phil', 'reminder_text': 'test2', 'group_name': 'test', 'set_time': 1533074920, 'reminder_time': 1533074930}, {'user_name': 'phil', 'reminder_text': 'test3', 'group_name': 'test', 'set_time': 1533074923, 'reminder_time': 1533074933})

如您所见,for循环遍历过时的元组中的字典,并且应该抓取所有与删除的字典不匹配的字典,并将它们存储在新的元组中。

但是事实并非如此。由于某种原因,我看不到(可能是一个我看不见的简单错误),它会跳过旧元组中的所有字典,而将新元组留空。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

当前,仅当字典中的每个值与已删除的字典不同时,您才从旧元组中获取字典。

根据您的问题,如果字典中的任何值与已删除的字典不同(即您要从列表中排除的唯一字典),您似乎想从旧元组中获取字典。新的元组就是已删除的元组。

and语句中将每个or切换到if,您的代码应表现出预期的效果(假设我是对的,您只想排除已删除的字典)。