标题有点含糊,但我想不出一种在如此短的空间内正确描述我的问题的方法。
我有一个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循环遍历过时的元组中的字典,并且应该抓取所有与删除的字典不匹配的字典,并将它们存储在新的元组中。
但是事实并非如此。由于某种原因,我看不到(可能是一个我看不见的简单错误),它会跳过旧元组中的所有字典,而将新元组留空。
有什么想法吗?
答案 0 :(得分:2)
当前,仅当字典中的每个值与已删除的字典不同时,您才从旧元组中获取字典。
根据您的问题,如果字典中的任何值与已删除的字典不同(即您要从列表中排除的唯一字典),您似乎想从旧元组中获取字典。新的元组就是已删除的元组。
在and
语句中将每个or
切换到if
,您的代码应表现出预期的效果(假设我是对的,您只想排除已删除的字典)。