我的代码类似于:
d = defaultdict(list)
for prod_no ,production in enumerate(productions):
cp = Production(*productions[prod_no])
count_yields = len(cp.pattern_list())
#temp.setdefault(temp[cp.lhs()], []).append(count_yields)
d[cp.lhs()].append(count_yields)
print d
作为输出,我得到的结论如下:
defaultdict(<type 'list'>, {'A': [3, 3, 4, 3], 'S': [1], 'B': [4,5]})
现在我需要报告错误,因为键'A'具有不同的多个值,如3和4.关于键'B'也可以这样说。
如果我得到像
这样的输出,应该没有任何错误defaultdict(<type 'list'>, {'A': [3, 3, 3, 3], 'S': [1]})
因为'A'和'S'在整个......中都有相同的值。
答案 0 :(得分:2)
如果要检查列表中的重复项(根据标题),可以将其转换为集合并检查其长度(在本例中为1):
if not all(len(set(items))==1 for items in d.values()):
#A list against some key does not have all-same elements.
答案 1 :(得分:2)
如果您不想要重复值,则应使用sets而不是列表作为字典的值。在任何情况下,您都可以使用
检查重复值dct = {'A': [4,3,3,3], 'S': [1]}
if any(len(v) != len(set(v)) for v in dct.values()):
raise ValueError('Duplicate values in an item list')
答案 2 :(得分:0)
如果d是字典(它可以是包含默认字典的任何字典)。您可以使用以下代码。这将检查词典中的重复
for i in d.values():
if len(set(i)) != len(i):
print str(i) + " error"
答案 3 :(得分:0)
我不能在你的例子中弄清楚Python语法,所以我会根据两个不同的想法回答你。
您想要做什么取决于您何时想要这样做。例如,如果您想防止重复值,那么这是一种方法:
x_set = {'A':[4, 3]}
incoming_val = 3
if incoming_val in x_set['A']:
print("The incoming value already present.")
如果要在错误报告后消除重复值,可以执行以下操作:
>>> x_set
{'A': [4, 3, 3]}
>>> list(set(x_set['A']))
[3, 4]
>>>
您还可以将列表附加尝试放入try .. catch并发出异常信号并捕获它。这也是一个Pythonic的事情。