将字符串放入字典Python中

时间:2017-07-07 09:11:07

标签: python string dictionary split

基本上,我有以下文件:

Paris, 458 boulevard Saint-Germain
Paris, 343 boulevard Saint-Germain
Marseille, 343 boulevard Camille Flammarion
Marseille, 29 rue Camille Desmoulins
Marseille, 1 chemin des Aubagnens
Paris, 12 rue des singes
Paris, 34 quai VoLtAiRe
Paris, 34 rue Voltaire
Lille, 120 boulevard Victor Hugo
Marseille, 50 rue Voltaire
Toulouse, 90 rue Voltaire
Marseille, 78 boulevard de la libération
Lille, 30 rue Victor Danel
Mont Saint Martin, 42 rue de Lyon
Mont de Marsan, 100 avenue Pierre de Coubertin
Strasbourg, 391 boulevard de Nancy
Lyon, 56 rue du Docteur Albéric Pont
Lille, 90 rue d'Arras
Lille, 76 impasse Georges Pompidou
Lyon, 2 allée des fleurs

让我们考虑第一行

Paris, 458 boulevard Saint-Germain

我想拆分该字符串,然后在字典中添加'Paris'作为键,并添加“468 boulevard Saint-Germain”作为值。

然后,以下行是

Paris, 343 boulevard Saint-Germain

由于我已经在我的词典中有巴黎,我想在巴黎添加“343 boulevard Saint-Germain”作为第二个价值。

到目前为止,我有以下代码:

import os, sys
import functions

class Addresses:

    def __init__(self):

        self.city = ""
        self.address = ""

addresses = {}

print("Hello")
userInput = input("Type a key : ")
if userInput == 'q':
    line = functions.myReadline(sys.argv[1])
    for line in line:
        addresses[line] = Addresses()
        addresses[line].city = line.split(',')
        addresses[line].address = line.split(',')
    for address in addresses.values():
        print("{0} : adresse correspondante {1}".format(address.city, address.address))
else:
    print("non")

基本上我希望{0}成为城市,{1}成为地址。但是当我执行它时,它就是它给我的东西:

Hello
Type a key : q
['Paris', ' 458 boulevard Saint-Germain'] : adresse correspondante ['Paris', ' 458 boulevard Saint-Germain']
['Paris', ' 343 boulevard Saint-Germain'] : adresse correspondante ['Paris', ' 343 boulevard Saint-Germain']
['Marseille', ' 343 boulevard Camille Flammarion'] : adresse correspondante ['Marseille', ' 343 boulevard Camille Flammarion']
['Marseille', ' 29 rue Camille Desmoulins'] : adresse correspondante ['Marseille', ' 29 rue Camille Desmoulins']
['Marseille', ' 1 chemin des Aubagnens'] : adresse correspondante ['Marseille', ' 1 chemin des Aubagnens']
['Paris', ' 12 rue des singes'] : adresse correspondante ['Paris', ' 12 rue des singes']
['Paris', ' 34 quai VoLtAiRe'] : adresse correspondante ['Paris', ' 34 quai VoLtAiRe']
['Paris', ' 34 rue Voltaire'] : adresse correspondante ['Paris', ' 34 rue Voltaire']
['Lille', ' 120 boulevard Victor Hugo'] : adresse correspondante ['Lille', ' 120 boulevard Victor Hugo']
['Marseille', ' 50 rue Voltaire'] : adresse correspondante ['Marseille', ' 50 rue Voltaire']
['Toulouse', ' 90 rue Voltaire'] : adresse correspondante ['Toulouse', ' 90 rue Voltaire']
['Marseille', ' 78 boulevard de la libération'] : adresse correspondante ['Marseille', ' 78 boulevard de la libération']
['Lille', ' 30 rue Victor Danel'] : adresse correspondante ['Lille', ' 30 rue Victor Danel']
['Mont Saint Martin', ' 42 rue de Lyon'] : adresse correspondante ['Mont Saint Martin', ' 42 rue de Lyon']
['Mont de Marsan', ' 100 avenue Pierre de Coubertin'] : adresse correspondante ['Mont de Marsan', ' 100 avenue Pierre de Coubertin']
['Strasbourg', ' 391 boulevard de Nancy'] : adresse correspondante ['Strasbourg', ' 391 boulevard de Nancy']
['Lyon', ' 56 rue du Docteur Albéric Pont'] : adresse correspondante ['Lyon', ' 56 rue du Docteur Albéric Pont']
['Lille', " 90 rue d'Arras"] : adresse correspondante ['Lille', " 90 rue d'Arras"]
['Lille', ' 76 impasse Georges Pompidou'] : adresse correspondante ['Lille', ' 76 impasse Georges Pompidou']
['Lyon', ' 2 allée des fleurs'] : adresse correspondante ['Lyon', ' 2 allée des fleurs']
你可以帮忙吗?感谢

2 个答案:

答案 0 :(得分:2)

  1. 我不知道line in line是否会给你任何命名约定冲突,但它可能会发生
  2. 我重新设计了这个结构,因为你的结构在逻辑方面可能已经存在缺陷了,因为它是一段相当短的代码,所以这应该可以解决你的问题:

    dictionary = {}
    
    for line in lines:
        city_and_address = line.split(",")
        if city_and_address[0] in dictionary:
            dictionary[city_and_address[0]].append(city_and_address[1])
        else:
            dictionary[city_and_address[0]] = [city_and_address[1]]
    

答案 1 :(得分:0)

你不应该这样做:

addresses[line] = Addresses()
parts = line.split(',')
addresses[line].city = parts[0]
addresses[line].address = part[1]