我已经编写了一些代码(或至少尝试过)来比较两个字典(X和Y)的键和值,它们具有完全相同的键但并不总是相同的值,例如x-y坐标图。该代码应该:
我在我的所有代码中都使用了Python 2.7(我是该语言的新手),但是Python 3解决方案是受欢迎的,但不是首选。
代码如下:
XDict = {
"Jersey" : 0,
"Boston" : -1,
"York" : 0,
"Vegas" : 1,
"Diego" : 0
}
YDict = {
"Jersey" : 0,
"Boston" : 0,
"York" : -1,
"Vegas" : 0,
"Diego" : 1
}
hereX = 0
hereY = 0
def GetLocation(Dict1, Dict2):
locationX = "_"
locationY = "not_"
Location = ''
for placeX, positionX in Dict1.iteritems():
if positionX == hereX:
locationX = placeX
for placeY, positionY in Dict2.iteritems():
if positionY == hereY:
locationY = placeY
if locationX == locationY:
Location = locationX
Location = locationY
print Location
GetLocation(XDict, YDict)
预期输出为"Jersey"
不幸的是,该代码未产生预期的输出(产生None
),这可能是由于locationX和locationY从未匹配的结果。
我尝试通过删除最后一个if
块并在函数顶部插入一个while locationX <> locationY:
来使用上述代码的另一种形式。但这只会导致代码永久循环。
我的代码最大目标是为Player类编写一个GetLocation()
函数,该函数使用分配给每个位置的x-y坐标返回玩家的位置。我知道我可以使用单个字典和具有唯一值的键来实现此目的,但我宁愿使用x-y坐标。
我用尽了我能想到的解决方案,并尝试在Internet上其他地方(包括Stack Overflow)搜索解决方案,发现了类似且有些有用的建议,但这些都不能解决问题,包括 this。
谢谢您的时间。
答案 0 :(得分:1)
我对这个问题的看法:
XDict = {
"Jersey" : 0,
"Boston" : -1,
"York" : 0,
"Vegas" : 1,
"Diego" : 0
}
YDict = {
"Jersey" : 0,
"Boston" : 0,
"York" : -1,
"Vegas" : 0,
"Diego" : 1
}
hereX = 0
hereY = 0
for ((n1, x), (n2, y)) in zip(XDict.items(), YDict.items()):
if (x==hereX) and (y==hereY):
print(n1)
break
打印:
泽西
但是,目前尚不清楚为什么在两个字典中都存储城市名称。更好的解决方案是像这样存储数据集:
d = {(0, 0): "Jersey",
(-1, 0): "Boston",
(0, -1): "York",
(1, 0): "Vegas",
(0, 1): "Diego"}
这样,您可以通过d[(hereX, hereY)]
将其编入索引。
答案 1 :(得分:1)
您并没有存储具有必需值的所有键。您需要存储所有它们,然后找到交点。
XDict = {
"Jersey" : 0,
"Boston" : -1,
"York" : 0,
"Vegas" : 1,
"Diego" : 0
}
YDict = {
"Jersey" : 0,
"Boston" : 0,
"York" : -1,
"Vegas" : 0,
"Diego" : 1
}
hereX = 0
hereY = 0
def GetLocation(Dict1, Dict2):
locationX = []
locationY = []
Location = ''
for placeX, positionX in Dict1.items():
if positionX == hereX:
locationX.append(placeX)
for placeY, positionY in Dict2.items():
if positionY == hereY:
locationY.append(placeY)
print(set(locationX).intersection(set(locationY)))
GetLocation(XDict, YDict)
输出:
{'Jersey'}
答案 2 :(得分:0)
首先,请遵循一些样式指南,例如 PEP8 。
我使用生成器为您解决
XDict = {
"Jersey" : 0,
"Boston" : -1,
"York" : 0,
"Vegas" : 1,
"Diego" : 0
}
YDict = {
"Jersey" : 0,
"Boston" : 0,
"York" : -1,
"Vegas" : 0,
"Diego" : 1
}
def keys_of_equal_vales(dict1, dict2):
for key in dict1 :
if key in dict2 and dict1[key]==dict2[key]:
yield key
else :
continue
raise StopIteration
print(list(keys_of_equal_vales(XDict,YDict)))
结果:
['Jersey']