【问题标题】:Creating a dictionary with values as another list将值作为另一个列表创建字典
【发布时间】:2017-11-18 01:10:50
【问题描述】:

我有一些数据如下:

United Kingdom,57533000,London,6756000,Europe,1066,1945,-,English
United States,252177000,Washington DC,606900,North America,1776,1945,-,English
Venezuela,19733000,Caracas,1290087,Latin America,1811,1945,-,Spanish
Vietnam,67589000,Hanoi,1088862,Orient,1945,1977,-,Vietnamese
Yemen,1184300,San'a,427150,Asia,1918,1957,Islam,Arabic
Argentina,36955182,Buenos Aires,2033445,Latin America,1853,1945,-,Spanish
Brazil,172860370,Brasilia,286037,0Latin America,1822,1945,-,Portuguese
Bahrain,634137,Manama,34137,Persian Gulf,1973,1977,Islamic,Arabic
Cameroon,15421937,Yaounde,421937,Africa,1960,1974,-,Franch
Djibouti,451442,Djibouti,1442,Africa,1977,1980,-,Franch
Equatorial Guinea,474214,Malabo,74214,Africa,1991,1995,-,Franch
Fiji,832494,Suva,32494,Oceania,1970,1975,-,English
France,59329691,Paris,329691,Europe,486,1945,-,Franch
Greece,10601527,Athens,601527,Europe,1829,1945,-,Greek
Germany,82797408,Berlin,1797408,Europe,1871,1960,-,German
Honduras,6249598,Tegucigalpa,1249598,Latin America,1821,1945,-,Spanish
China,1261832482,Beijing,61832482,Asia,-221,1945,-,Chinese
Canada,31281092,Ottawa,1281092,North America,1867,1945,-,English
Hungary,10138844,Budapest,1138844,Europe,1001,1945,-,Hungerian
India,1014003817,New Delhi,14003817,Asia,1947,1950,-,Indian
Italy,57634327,Rome,3634327,Europe,1861,1950,-,Italian
Ireland,3797257,Dublin,797257,Europe,1921,1945,-,English
Japan,126549976,Tokio,16549976,Asia,-660,1955,-,Japanese

我的要求是将数据存储在字典中,如下所示:

{'Portuguese': ['Brazil'], 'Franch': ['Cameroon', 'Djibouti', 'Equatorial Guinea', 'France'], 'Chinese': ['China'], 'Vietnamese': ['Vietnam'], 'German': ['Germany'], 'English': ['United Kingdom', 'United States', 'Fiji', 'Canada', 'Ireland'], 'Japanese': ['Japan'], 'Greek': ['Greece'], 'Indian': ['India'], 'Spanish': ['Venezuela', 'Argentina', 'Honduras'], 'Arabic': ['Yemen', 'Bahrain'], 'Hungerian': ['Hungary'], 'Italian': ['Italy']}

有人可以帮助我实现这一目标吗?

发布为重复的其他查询对我没有帮助。我已经添加了我尝试过的代码。请帮帮我。

【问题讨论】:

  • 我投票结束这个问题作为题外话,因为 SO 不是代码编写服务,请展示你的努力
  • 这是我尝试过的代码
  • countryData=open('filename.txt','r') dictCountry={} langList=[] countryList=[] def createList(langL,input): input=input.rstrip() 国家=input.split(',')[0] if input.split(',')[-1] in langL: countryList.append(country) return countryList for line1 in countryData: line1=line1.rstrip() lang1= line1.split(',')[-1] 如果 lang1 不在 langList: langList.append(lang1) for line2 in countryData: line2=line2.rstrip() lang=line2.split(',')[-1] dictCountry[lang]=createList(lang, line2) print(dictCountry)
  • @PhaniKumar 请在问题中添加格式正确的代码,而不是作为评论,这将帮助人们了解您的尝试:)

标签: python csv dictionary


【解决方案1】:

您的问题中有很多 cmets 要求您在问题本身上发布格式正确的代码。这肯定会让您更早得到回应。

我将您粘贴的代码作为评论并尝试对其进行格式化,我想出了这个:

countryData=open('filename.txt','r') 
dictCountry={} 
langList=[] 
countryList=[] 

def createList(langL,input): 
    input=input.rstrip()
    country=input.split(',')[0] 
    if input.split(',')[-1] in langL: 
        countryList.append(country) 
    return countryList 

for line1 in countryData: 
    line1=line1.rstrip() 
    lang1=line1.split(',')[-1] 
    if lang1 not in langList: 
        langList.append(lang1) 

for line2 in countryData: 
    line2=line2.rstrip() 
    lang=line2.split(',')[-1] 
    dictCountry[lang]=createList(lang, line2) 

print(dictCountry) 

您的尝试存在一些问题:

  • 对同一个打开的文件进行多次迭代。这将使第二个 for 循环永远不会运行
  • countryList 是全局定义的,因此它永远不能只包含当前语言的国家/地区
  • langList 的内容一旦被填充,就永远不会被使用

我把它改成了一个可行的解决方案:

f = open('filename.txt','r')
countryData = f.readlines()
f.close()

dictCountry = {}

for line in countryData:
    line = line.rstrip()
    lang = line.split(',')[-1]
    country = line.split(',')[0]
    if lang not in dictCountry:
        dictCountry[lang] = []

    dictCountry[lang].append(country)

print(dictCountry)

【讨论】:

    【解决方案2】:

    希望下面给出的解决方案会有所帮助。我还附上了我得到的输出:

            f = open('lang.txt','r')
            countryData = f.readlines() //reading all contents of file
            f.close()
    
            dictCountry = {}
    
            for line in countryData:
                pos = 0
    
                line = line.rstrip()
                lang = line.split(',')[-1] //getting the lang name from eachline
                #updating the list of languages
                if lang not in dictCountry:
                    dictCountry[lang] = []
    
                country = line.split(',') //splitting the line fro country names
                sub = ' '
                for i in country:
                    if i in dictCountry.keys(): //ignoring lang name present in 
                        pass
                    elif i.isalpha():
                        dictCountry[lang].append(i)
                    elif i.find(sub)!= -1:
                        dictCountry[lang].append(i)
                    else:
                        pass
    
            for i in dictCountry.keys():
                print i," : ",dictCountry[i]
    
    
    **Output :
    Portuguese  :  ['Brazil', 'Brasilia', '0Latin America']
    Franch  :  ['Cameroon', 'Yaounde', 'Africa', 'Djibouti', 'Djibouti', 'Africa', 'Equatorial Guinea', 'Malabo', 'Africa', 'France', 'Paris', 'Europe']
    Chinese  :  ['China', 'Beijing', 'Asia']
    Vietnamese  :  ['Vietnam', 'Hanoi', 'Orient']
    German  :  ['Germany', 'Berlin', 'Europe']
    English  :  ['United Kingdom', 'London', 'Europe', 'United States', 'Washington DC', 'North America', 'Fiji', 'Suva', 'Oceania', 'Canada', 'Ottawa', 'North America', 'Ireland', 'Dublin', 'Europe']
    Japanese  :  ['Japan', 'Tokio', 'Asia']
    Greek  :  ['Greece', 'Athens', 'Europe']
    Indian  :  ['India', 'New Delhi', 'Asia']
    Spanish  :  ['Venezuela', 'Caracas', 'Latin America', 'Argentina', 'Buenos Aires', 'Latin America', 'Honduras', 'Tegucigalpa', 'Latin America']
    Arabic  :  ['Yemen', 'Asia', 'Islam', 'Bahrain', 'Manama', 'Persian Gulf', 'Islamic']
    Hungerian  :  ['Hungary', 'Budapest', 'Europe']
    Italian  :  ['Italy', 'Rome', 'Europe']**
    

    【讨论】:

      【解决方案3】:
      Here is the answer I could reach to:
      
      f=open('country.txt','r')
      countryData1=f.readlines()
      f.close()
      
      sourceDict={}
      destDict={}
      
      for lines in countryData1:
          lines=lines.rstrip()
          lang=lines.split(',')[-1]
          if lang not in sourceDict.keys():
              sourceDict[lang]=lines.split(',')[0]+","
          else:
              sourceDict[lang]+=lines.split(',')[0]+","    
      
      for item in sourceDict.keys():
          sourceDict[item]=str(sourceDict[item]).rstrip(',')
          destDict[item]=str(sourceDict[item]).split(',')
      
      
      for item in destDict.keys():
          print(item+ "   "+ str(destDict[item]))
      

      【讨论】:

        猜你喜欢
        • 2016-10-05
        • 1970-01-01
        • 2017-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-04
        • 2021-10-07
        相关资源
        最近更新 更多