如何取出列表中字典的值并进行比对?python

a=[{'x':2,'y':4},{'x':5,'y':6},{'x':7,'y':8},{'x':4,'y':4}]foritemina:print(a[item]['... a = [{'x': 2, 'y': 4}, {'x': 5, 'y': 6}, {'x': 7, 'y': 8}, {'x': 4, 'y': 4}]for item in a: print(a[item]['x'])#随便写了一个例子,遍历列表中的字典元素,但是报错了,索引不能是字典类型我做了一个贪吃蛇小游戏,游戏中用列表中带字典的方式存储了每一节贪吃蛇的坐标位置,现在def了一个新函数随机画出贪吃蛇吃的食物,但是我不想画在贪吃蛇的身上。所以想要遍历出贪吃蛇的坐标位置,并和随机生成的坐标对比,如果相同就重新取值,不相同的时候输出,这里的重新取值如何做到?这是两个问题,请看清楚 展开
 我来答
紫薇参星
科技发烧友

2019-02-16 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3623万
展开全部

按照你的要求,遍历贪吃蛇的坐标位置,并和随机生成的坐标对比,如果相同就重新取值,不相同的时候输出的Python程序如下

import random
map_width=30
map_height=30
a = [{'x': 2, 'y': 4}, {'x': 5, 'y': 6}, {'x': 7, 'y': 8}, {'x': 4, 'y': 4}]
random_x=random.randint(3,map_width-8)
random_y=random.randint(3,map_height-8)
flag=True
for i in range(len(a)):
 if random_x==a[i]['x'] and random_y==a[i]['y']:
  flag==False
  break
if flag==True:
 print("random_x=%d,random_y=%d"%(random_x,random_y))
else:
 random_x=random.randint(3,map_width-8)
 random_y=random.randint(3,map_height-8)

源代码(注意源代码的缩进)

更多追问追答
追问
不好意思之前把这个事情给忘记了
你这样的二分之结构还是简单了,有漏洞,如果重新取的随机值又和字典里的坐标重复了呢,break以后应该重新判断;
追答

是的,在重新取的随机值与字典里的坐标重复时,我没有重新循环,现改进如下

import random 

map_width=30 

map_height=30 

a = [{'x': 2, 'y': 4}, {'x': 5, 'y': 6}, {'x': 7, 'y': 8}, {'x': 4, 'y': 4}] 

random_x=random.randint(3,map_width-8) 

random_y=random.randint(3,map_height-8) 

while True:

 flag=True 

 for i in range(len(a)): 

  if random_x==a[i]['x'] and random_y==a[i]['y']: 

   flag==False 

   break 

 if flag==True: 

  print("random_x=%d,random_y=%d"%(random_x,random_y)) 

  break

 else: 

  random_x=random.randint(3,map_width-8) 

  random_y=random.randint(3,map_height-8)

源代码(注意源代码的缩进)

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式