有人可以解释为什么python字典以这种方式表现吗?

时间:2017-08-16 17:11:53

标签: python python-2.7 dictionary

我正在尝试根据一组逻辑条件创建一个目录,但它只能通过第二个逻辑语句正确执行。

# Sample code:

test_dict = {}

file_0 = "C:/Year/yea_84.txt"
file_1 = "C:/Year/yea_92.txt"
file_2 = "C:/Year/yea_01.txt"
file_3 = "C:/Year/yea_06.txt"

for x in range(1985, 2008):
    if (x <= 1991):
        test_dict[x] = file_0
    elif (x > 1991 & x <= 2000):
        test_dict[x] = file_1
    elif (x > 2000 & x <= 2005):
        test_dict[x] = file_2
    elif (x > 2005):
        test_dict[x] = file_3

print test_dict

# Print result
1985 C:/Year/yea_84.txt
1986 C:/Year/yea_84.txt
1987 C:/Year/yea_84.txt
1988 C:/Year/yea_84.txt
1989 C:/Year/yea_84.txt
1990 C:/Year/yea_84.txt
1991 C:/Year/yea_84.txt
1992 C:/Year/yea_92.txt
1993 C:/Year/yea_92.txt
1994 C:/Year/yea_92.txt
1995 C:/Year/yea_92.txt
1996 C:/Year/yea_92.txt
1997 C:/Year/yea_92.txt
1998 C:/Year/yea_92.txt
1999 C:/Year/yea_92.txt
2000 C:/Year/yea_92.txt
2001 C:/Year/yea_92.txt
2002 C:/Year/yea_92.txt
2003 C:/Year/yea_92.txt
2004 C:/Year/yea_92.txt
2005 C:/Year/yea_92.txt
2006 C:/Year/yea_92.txt
2007 C:/Year/yea_92.txt

我怀疑这是因为每个循环字典都会改变顺序,但这似乎是一个糟糕的解释。有人可以扩展这种行为吗?

1 个答案:

答案 0 :(得分:3)

您使用错误的运算符进行布尔测试。 &binary bitwise operator,而不是boolean logic operator。因为它有一个different operator precedence,你真的在​​计算别的东西:

x > 1991 & x <= 2000

被解释为

x > (1991 & x) <= 2000

你的16年中都是如此,包括2001年到2007年。

改为使用and

x > 1991 and x <= 2000

或使用比较链:

1991 < x <= 2000

放在一起,将最后一次测试简化为else

for x in range(1985, 2008):
    if x <= 1991:
        test_dict[x] = file_0
    elif 1991 < x <= 2000:
        test_dict[x] = file_1
    elif 2000 < x <= 2005:
        test_dict[x] = file_2
    else:
        test_dict[x] = file_3