将列表值附加到字典

时间:2017-06-13 20:30:09

标签: list dictionary append python-3.6

Python 3.6.0

我正在编写一个小程序,以下列形式获取用户输入: 城市,国家

然后我创建了一个关键字词典:国家/地区的价值对 是关键,城市是价值观。

但是,我希望将值(城市)片段作为列表以便用户使用 可以进入同一个国家的多个城市。

示例:

city1,country1 city1,country2 city2,country1

我接近这段代码:

destinations = {}
while True:
    query = input("Tell me where you went: ")
    if query == '':
        break
    temp = query.split(',')
    if len(temp) != 2:
        temp = []
        continue
    city = [query.split(',')[0]]
    country = query.split(',')[1]
    if country not in destinations:
        destinations[country] = city
    else:
        destinations[country].append(city)

我的问题是,附加城市也是他们自己的名单。这是来自PyCharm:

destinations = {' country1': ['city1', ['city2']], ' country2': ['city1']}

我想要的是:

destinations = {' country1': ['city1', 'city2'], ' country2': ['city1']}

我知道为什么会发生这种情况,但是,我似乎无法弄清楚如何将其他城市添加到列表中,而不是每个城市都在其自己的列表中。

如果用户现在输入:city3,country1则目标{}应为:

destinations = {' country1': ['city1', 'city2', 'city3'], ' country2': ['city1']}

你明白了。

感谢。

2 个答案:

答案 0 :(得分:2)

当您使用[].append([])附加列表时,会追加列表本身,而不是实际内容。您可以做的与您目前的相似,但是当您设置变量city时,请将其设置为实际文本本身,然后调整if语句中的代码。

destinations = {}
while True:
    query = input("Tell me where you went: ")
    if query == '':
        break
    temp = query.split(',')
    if len(temp) != 2:
        temp = []
        continue
    city = query.split(',')[0] //set city to the string and not the string in a list
    country = query.split(',')[1]
    if country not in destinations:
        destinations[country] = [city] //now the value for the key becomes an array
    else:
        destinations[country].append(city)

答案 1 :(得分:1)

只需更改列表创建的位置

destinations = {}
while True:
    query = input("Tell me where you went: ")
    if query == '':
        break
    temp = query.split(',')
    if len(temp) != 2:
        temp = []
        continue
    city = query.split(',')[0]
    country = query.split(',')[1]
    if country not in destinations:
        destinations[country] = [city]  # <-- Change this line
    else:
        destinations[country].append(city)