Python 计算JSON中的唯一值

Python 计算JSON中的唯一值,python,json,typeerror,Python,Json,Typeerror,我有一个名为file.json的json,如下所示: { "domain": "Something", "domain": "Thingie", "name": "Another", "description": "Thing" } 我正在尝试编写一个python脚本,它将在域中生成一组值。在本例中,它将返回 {'Something', 'Thingie'} 以下是我尝试过的: import json with open("thefile.json") as my_file:

我有一个名为file.json的json,如下所示:

{
  "domain": "Something",
  "domain": "Thingie",
  "name": "Another",
  "description": "Thing"
}
我正在尝试编写一个python脚本,它将在域中生成一组值。在本例中,它将返回

{'Something', 'Thingie'}
以下是我尝试过的:

import json
with open("thefile.json") as my_file: 
  data = json.load(my_file)
  ids = set(item["domain"] for item in data.values())
print(ids)
我收到了错误信息

    unique_ids.add(item["domain"])
TypeError: string indices must be integers

在堆栈交换上查找答案后,我被难住了。为什么我不能用字符串作为索引,因为我使用的是json,我想它的数据类型是字典!?如何获取它,以便获取域的值?

因此,首先,您可以在此处阅读有关JSON格式的更多信息:

其次,字典必须有唯一的键。因此,将两个密钥命名为domain是不正确的。您可以在此处阅读有关python词典的更多信息:

现在,我推荐以下两种设计,它们可以满足您的需要:

多个名称,多个域:在这种设计中,您可以访问网站,并检查其每个值的域,如ids=setitem[domain],以查看数据[websites]中的项目 一个名称,多个域:在这个设计中,每个网站都有多个域,可以使用JVM\u Domains=setdata[Domains]访问这些域
我希望这有帮助。如果我遗漏了任何细节,请告诉我。

因此,首先,您可以在此处阅读有关JSON格式的更多信息:

其次,字典必须有唯一的键。因此,将两个密钥命名为domain是不正确的。您可以在此处阅读有关python词典的更多信息:

现在,我推荐以下两种设计,它们可以满足您的需要:

多个名称,多个域:在这种设计中,您可以访问网站,并检查其每个值的域,如ids=setitem[domain],以查看数据[websites]中的项目 一个名称,多个域:在这个设计中,每个网站都有多个域,可以使用JVM\u Domains=setdata[Domains]访问这些域
我希望这有帮助。如果我遗漏了任何细节,请告诉我。

您的JSON中有问题,密钥重复。我不确定它是否被禁止,但我肯定它的格式不好。 除此之外,它当然会给你带来很多问题

字典不能有重复的键,重复键的返回是什么

那么,修复JSON,类似这样的东西

{
  "domain": ["Something", "Thingie"],
  "name": "Another",
  "description": "Thing"
}

猜猜看,好的格式几乎可以解决您的问题。您可以在列表中找到重复项:

您的JSON中有问题,重复键。我不确定它是否被禁止,但我肯定它的格式不好。 除此之外,它当然会给你带来很多问题

字典不能有重复的键,重复键的返回是什么

那么,修复JSON,类似这样的东西

{
  "domain": ["Something", "Thingie"],
  "name": "Another",
  "description": "Thing"
}

猜猜看,好的格式几乎可以解决您的问题列表中可以有重复项:

您的项目是一个列表,您需要传递一个整数/索引才能访问列表中的字符串您的项目是一个列表,你需要传递一个整数/索引才能访问列表中的字符串。这与我推荐的解决方案有何不同?就在我发帖时,我看到你回答。别担心。这与我推荐的解决方案有何不同?就在我发帖时,我看到你回答。别担心。
{
  "domain": ["Something", "Thingie"],
  "name": "Another",
  "description": "Thing"
}