【问题标题】:How to print first item in a string from a dictionary with a random number and print remaining numbers?如何使用随机数从字典中打印字符串中的第一项并打印剩余的数字?
【发布时间】:2019-05-12 20:15:35
【问题描述】:

我正在创建一个打开和读取文本文件的函数,用逗号分隔。该函数将创建文本文件的字典并打印出每个字符串中的第一项,以及一个随机数 (1-10) 作为键。然后这些值将是它们各自字符串中的剩余数字

例如。文件

  January,900,483,394,883,649
  February,200,329,596,283,972
  March,120,237,923,102,787

我已经能够打印字典,但输出与我想要的结果相去甚远。

import random
def dictionaryTest():
  openfile= open('example.txt', 'r')
  monthData = openfile.readlines()
  openfile.close


  dictionary = {}
  rNum = random.randrange(1,11)

  for lines in monthData:
      info = line.split()
      key, values = info[0], info[1:]
      d[key] = info[0], rNum
      values = info[1:]

  print(dictionary)

预期输出:

{('January, 8'): [900,483,394,883,649],('February, 1'): 
[200,329,596,283,972],('March, 4'): [120,237,923,102,787]}

实际输出:

{'January, 900, 483, 395, 883, 649':('January, 900, 483, 395, 883, 
649'), 'February, 200,329,596,283,972':('February, 
200,329,596,283,972'), 'March, 120,237,923,102,787':('March, 
120,237,923,102,787')}

【问题讨论】:

  • info = line.split() -.... 以空格分隔 - 不是逗号

标签: python python-3.x dictionary random


【解决方案1】:

这是我的尝试:

import csv
import random

def dictTest():
    with open ("/Users/richard/Desktop/python testing/test.csv", 'r') as csvfile:
        output = csv.reader(csvfile)
        dictionary = {}
        for row in output:
            rNum = random.randrange(1,11)
            row[0] += " "+ str(rNum)
            list_ints =[]
            for element in row[1:]:
                list_ints.append(int(element))
            dictionary[row[0]] = list_ints


        print(dictionary)

dictTest()

输出:

【讨论】:

  • 我将如何删除每个数字周围的引号?所以它看起来像:[900,483,394...]
  • @Richard_K_Yu ^^
  • 您想将数据从字符串类型转换为整数
  • 我更新了函数来显示这个。如果您有任何问题,请告诉我。
【解决方案2】:

您的代码应如下所示以获得上述输出。当您需要用逗号分隔时,您必须在 split() 中提及它,如下所示。如果您需要为每个字典键提供不同的随机数,则必须将rNum = random.randrange(1,11) 代码行放在 FOR LOOP 内。

import random

openfile= open('example.txt', 'r')
monthData = openfile.readlines()
openfile.close

dictionary = {}

for line in monthData:
    rNum = random.randrange(1,11)
    info = line.split(',')
    key = info[0], rNum
    value = info[1:]
    for i in range(len(value)):
        value[i] = int(value[i])
    dictionary[key] = value

print(dictionary)

【讨论】:

  • @Ravindu_Perera 我将如何删除每个数字周围的引号?所以它看起来像:[900,483,394...]
  • 我更新了代码以向您展示如何操作。只需查看 FOR LOOP 内的 FOR LOOP。在那里,我已将每个字符串转换为整数(类型转换)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多