小编sun*_*nny的帖子

Python requests.json() 对象作为字典无法使用 hasattr() 或 object.keys() 调用中的值识别自己的键

总结:dictionary/json 对象表示它没有给定的键(使用hasattr调用或value in object.keys布尔测试,即使该键出现在object.keys()调用中。那么我如何访问该键的值?

更长的版本:我很困惑试图解析一些从 API 返回的 json。当我尝试确定显示为字典的 json 对象是否具有给定的键时,即使代码显示该对象的键存在,该代码也会为该键返回 false。

这是我检索 json 的方法:

   r = requests.get(url, headers = {'User-Agent':UA})

    try:
        print(r.json())
        jsonobject = r.json()
        print("class of jsonobject is %s"%jsonobject.__class__.__name__)
        print("here are dictionary keys %s"%jsonobject.keys())
        if hasattr(jsonobject, 'laps') and jsonobject['laps'] is not None:
            ...
        else:
            print("no laps object")

        if hasattr(jsonobject, 'points') and jsonobject['points'] is not None:
           ...
Run Code Online (Sandbox Code Playgroud)

我这样做的原因是我经常从嵌套在 'laps' 数组或 'points' 数组中的字段中得到编码错误,因此我无法将 json 数据插入到 MongoDB 数据库中。我想从 json 对象中删除这些字段,因为它们无论如何都不包含有用的信息。

问题是 json 对象总是为 hasattr(jsonobject, 'laps') 和 …

python json dictionary mongodb

2
推荐指数
1
解决办法
3024
查看次数

Python类变量是否在初始化第一个类实例之前初始化?

我还不知道如何在需要时在Python文档中查找信息.如果有人能指出我处理类变量初始化的部分,我将不胜感激.我想知道何时初始化类变量.

这对我很感兴趣,因为我编写了一个在类变量中保存单个数据库连接的类,所以我想确保在创建第一个类实例之前不打开此连接.

我意识到我可以通过最初将连接设置为None然后在第一个实例初始化时在其init方法中初始化它来做到这一点,但这似乎比它应该更复杂.我对以下内容安全吗

class DatabaseConnection:   
    connection = DB_API.makeConnection()
    ...
Run Code Online (Sandbox Code Playgroud)

python

0
推荐指数
1
解决办法
101
查看次数

基于索引向量有效地将值分配给特定数据表行号

我有一个按国家/地区列出数据的数据表,我想添加区域信息.我做了默认的"欧洲",所以我需要纠正那些不在"欧洲"地区的行.这是我需要分配的内容:

    ordered_tally[ , region :="Europe"]
    AsiaRows = c(5, 12, 17, 24, 25, 26, 34, 36, 45, 56, 61, 64, 75, 76, 81, 88, 90, 91)
    NorthAmericaRows = c(7, 18, 42, 47)
    SouthAmericaRows = c(11, 13, 32, 38, 41, 46, 48, 52, 53, 57, 58, 68, 77, 78, 83)
    AfricaRows = c(22, 66, 67, 70, 74, 82, 84, 86, 95)
    OceaniaRows = c(31, 62)
    MiddleEastRows = c(20, 51, 71, 72, 87, 89, 92)
    region = c("Asia", "NorthAmerica", "SouthAmerica", "Africa", "Oceania", "MiddleEast") …
Run Code Online (Sandbox Code Playgroud)

r data.table

0
推荐指数
1
解决办法
50
查看次数

可以将operator*重载为多个int和一个char*?

我想获得功能,所以我可以这样做:

std::cout << "here's a message" << 5*"\n";
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

std::string operator* (int lhs, const char* rhs) {
  std::string r = "";
  for(int i = 0; i < lhs; i++) {
    r += rhs;
  }
  return r;
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

error: ‘std::string operator*(int, const char*)’ must have an argument of class or enumerated type
Run Code Online (Sandbox Code Playgroud)

根据这篇SO帖子中的答案,"必须有一个类或枚举类型的参数"实际上意味着它几乎看起来我不能做这个时期.那是真的吗?如果没有,我该如何解决这个问题或安排解决方法?

我知道我可以做的是有rhs一个std::string,但随后的演习整点半放弃,因为5*std::string("\n")很笨重.

c++ overloading

0
推荐指数
1
解决办法
204
查看次数

函数调用期间指针地址略有变化

我的char*参数似乎正在更改地址,而无需我直接修改它。char*我在 a 中打印两者的地址custom deallocator,然后立即在另一个函数中打印。我没有明确地对char*但两个记录的语句中的地址总是略有不同。

这是我的自定义解除分配器的相关部分:

    template <std::size_t N, std::size_t MAX_SIZE, int ID, template <class Created> class MemPolicy>
    void arena<N, MAX_SIZE, ID, MemPolicy>::deallocate(char* p, std::size_t n) 
    {
      std::cout << "inside arena deallocate p is " << &p << std::endl;
      std::cout << "inside arena deallocate n is " << n << std::endl;
      MemPolicy<char>::addMemory(p, n);
...
}
Run Code Online (Sandbox Code Playgroud)

这是无效的addMemory:

void addMemory(char* p, std::size_t n){
      std::cout << "adding memory: " << &p << std::endl;
      std::cout << "size …
Run Code Online (Sandbox Code Playgroud)

c++ pointers

-1
推荐指数
1
解决办法
1247
查看次数

标签 统计

c++ ×2

python ×2

data.table ×1

dictionary ×1

json ×1

mongodb ×1

overloading ×1

pointers ×1

r ×1