2016-09-01 59 views
1

我想创建一个循环,将进一步细化用户自定义字典原来传球后和用户字符串解析:Python字典更新和完善循环

product_info = {'make': [], 'year': [], 'color': []} 

make = ['honda','bmw','acura'] 
year = ['2013','2014','2015','2016'] 
colors = ['black','grey','red','blue'] 

user_input = raw_input() 

for m in make: 
    if m in user_input: 
     product_info['make'].append(m) 
for y in year: 
    if y in user_input: 
     product_info['year'].append(y) 
for c in color: 
    if c in user_input: 
     product_info['color'].append(c) 

这里就是我想检查字典并确保所有值都被占满了,如果没有,要求更多的投入来改进现有的字典:

例如:I am looking for a grey car

product_info = {'make': [], 'year': [], 'color': ['grey']} 

if product_info['make'] is null: 
    print 'what make of car are you looking for?' 

    new_input = 'i am looking for a 2015 honda' 

通过字典/解析过程中再次发送字符串和更新产品的详细信息词典如果填写,也看看,如果他们提到了一年,这一次的值,等...

更新字典:

product_info = {'make': ['honda'], 'year': ['2015'], 'color': ['grey']} 

如何接收新的用户输入,请求更多信息并通过它解析,查找属性并更新现有字典而不修改旧属性?

回答

1
while [] in product_info.values(): 
    for key in product_info: 
     if product_info[key] == []: 
      print("What",key) 
      user_input = raw_input() 
      for each in user_input.split(' '): 
       if each in make: 
        key = 'make' 
        product_info[key].append(each) 
       elif each in year: 
        key = 'year' 
        product_info[key].append(each) 
       elif each in colors: 
        key = 'color' 
        product_info[key].append(each) 

这个非常粗糙的工作系统,你可以改进它,但这取决于你。

+0

我相信OP也可能想要确保用户输入“有效”的值。 提示时,您可能需要包含特定键的可接受输入值列表:print(“What%s?%s”%(key,values [key]))''。当然,这意味着要创建一个将值映射到有效值而不是具有独立列表('make','year','colors')的'values'映射。 其次,除非它是有效值,否则不要分配用户输入值。这意味着将上例中的最后一行放在'if'块中:'if user_input in values [key]:'。 –

+0

'#使用你必须在这里解析他们的输入' 我希望他会把他的用户输入解析在这里....也许这个评论是不够清楚,我想我会更新他的用户进程逻辑 – MooingRawr

+0

所以这与我正在寻找的非常接近,但是,如果使用它,我还想要选取其他值。例如,如果循环询问'是什么使?',并且用户碰巧进入'黑色本田',则它将继续并解析颜色,并跳过提示以询问颜色键 – chattrat423