【问题标题】:How to assign keys and save it as dictionary in python?如何在python中分配键并将其保存为字典?
【发布时间】:2019-07-04 17:13:07
【问题描述】:

我是 python 新手。我正在处理一个类似于以下内容的 CSV 文件:

man,nut,bag
rat,cat
dog,fog,cat,man

问题是,我想为 csv 文件中的每个值分配一个唯一编号,以便唯一编号充当键,而 CSV 中的项目充当字典中的值。 此外,如果任何值在 CSV 文件中重复,我不想为其分配另一个键。

所需的输出应该是这样的:

dictionary=
{
1: "man",
2: "nut",
.
.
.
6: "dog",
7: "fog",
5: "cat",
1: "man"
}

【问题讨论】:

  • 一个python dict只能有唯一键(人不能重复),但值可以重复。
  • 也许你的价值应该是关键,你的关键应该是价值?
  • @klaus 哦,是的,对不起!我打错了!
  • @Praveenkumar 是的,抱歉我打错了

标签: python-3.x csv dictionary-comprehension


【解决方案1】:

我可能会做这样的事情(你必须用open('file.csv', 'r') 替换StringIO(txt) 部分):

from io import StringIO
from csv import reader

txt = """man,nut,bag
rat,cat
dog,fog,cat,man"""

dct = {}

with StringIO(txt) as file:
    rows = reader(file)
    for row in rows:
        for word in row:
            if word not in dct:
                dct[word] = len(dct)
# {'man': 0, 'nut': 1, 'bag': 2, 'rat': 3, 'cat': 4, 'dog': 5, 'fog': 6}

如果您想不惜一切代价避免 csv 导入(为什么?!),您可以拆分文件的每一行:

with StringIO(txt) as file:
    for line in file:
        row = line.strip().split(",")
        for word in row:
            if word not in dct:
                dct[word] = len(dct)

【讨论】:

  • 谢谢!可以使用CSV,我是专门针对使用Pandas等库的。
【解决方案2】:

你应该保留一个字典来保存csv文件中每个单词的值,然后用一个列表来保存重复的(value, word)对

例子:

value_of_word_dict = {}
for word in csv:
    value_of_word_dict[word] = # assign value to the word

value_of_word_dict = {'man':1, 'nut':2, 'bag':3, 'rat':4, 'cat':5, 'dog':6, 'fog':7}

output = []
for word in csv:
    word_value = value_of_word_dict[word]
    output.append((word_value, word))
output = [
(1, "man")
(2, "nut"),
(3, "bag"),
(4, "rat"),
(5, "cat"),
(6, "dog"),
(7, "fog"),
(5, "cat"),
(1, "man")
]

变量output 就是你想要的。它不是字典,而是列表,因为字典不允许重复键。

【讨论】:

    【解决方案3】:

    你好&对不起(还不能评论)

    首先: dict 以字符串为索引命名。 因此,您的“字典”示例是不可能的。

    拥有“自然”数字索引的列表或元组。 唯一要做的就是避免双打(人,猫)。 然后你很容易使用: first_value = name_of_list_or_tuple[0] ...对于第一个(从 0 开始)值。

    【讨论】:

    • 最后一段没看懂。你能用更多细节扩展它吗?
    • 示例:for number in range(0,len(dir())): dir()[number] 显示从 0 到 len(dir()) 的所有列表值
    猜你喜欢
    • 2021-10-06
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    相关资源
    最近更新 更多