标签: associative-array

在Python中验证dicts


我在python中寻找工具或示例来/如何验证字典.
例如,我有dict:

test = {'foo' : 'bar', 'nested' : {'foo1' : 'bar1', 'foo2' : 'bar2'} }
Run Code Online (Sandbox Code Playgroud)

现在我必须验证它.可以说,key的值foo必须是boolean False或非空字符串.接下来,如果key foo1具有值bar1,则该键foo2 必须在范围内为int 1..10.我写了简单的函数来做到这一点,但这不是我想要的.是的,当然,我可以测试dict中的每一个项目if..else,但如果dict有> 50个元素,那么它有点不舒服.

在Python中有没有好的工具/库?我不是在寻找解析器,只是快速有效地做到这一点.

python validation schema dictionary associative-array

18
推荐指数
1
解决办法
1万
查看次数

PHP:在关联数组索引中使用空格

这种不良做法/会导致问题吗?

$_SESSION['stuff to keep']
Run Code Online (Sandbox Code Playgroud)

而不是呼吁str_replace()指数.

php associative-array

17
推荐指数
3
解决办法
2万
查看次数

如何初始化一个以结构为值的地图?

我使用map作为ID - > value的关联数组,其中值是定义对象的结构:

#include <map>

struct category {
        int id;
        std::string name;
};

std::map<int, category> categories;

int main() {
        categories[1] = {1, "First category"};
        categories[2] = {2, "Second category"};

}
Run Code Online (Sandbox Code Playgroud)

上面的代码用g ++编译,但有以下警告:

warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
Run Code Online (Sandbox Code Playgroud)

我在这里阅读了关于struct初始化的各种问题/答案,但我仍然有点困惑.我有一系列相关问题:

  1. 我可以添加编译器选项-std = c ++ 0x并完成警告,但仍然没有更明智的基础问题.如果我在类别结构中添加方法,事情会不会破裂?

  2. 以更符合C++ 03的方式初始化此POD结构(类别)的最佳方法是什么?

  3. 基本上,我还不确定以某种方式而不是另一种方式做事的后果.这种关联数组(其中关键是对象的ID)的很容易与PHP,我还在学习正确的方法做它在C++.在上面的代码中是否有任何我应该注意的事项?

编辑
下面的问题是相关的,但是当我第一次看到他们,我不明白的答案:
c + +初始化匿名结构
的C++初始化结构与数组作为成员
用C初始化结构++

c++ struct associative-array initialization map

17
推荐指数
3
解决办法
5万
查看次数

array_unique用于数组内的数组

我需要一个类似于array_unique数组内部数组的函数.

案例 - 应该相等,但输出"不相等":

<?php
$arr=array(array('a',1),array('a',2));
$arr2=array_unique($arr);
if($arr2==$arr){
  echo "equal";
}
else{
  echo "not equal";
}
?>
Run Code Online (Sandbox Code Playgroud)

如何更改代码以使输出"相等"?

php associative-array multidimensional-array array-unique

17
推荐指数
1
解决办法
9253
查看次数

Bash中的多维关联数组

我正在尝试创建一个多维关联数组但需要一些帮助.我已经回顾了这个SO答案中建议的页面,但它让我更加困惑.到目前为止,我所拥有的是:

剧本:

#!/bin/bash
declare -A PERSONS
declare -A PERSON
PERSON["FNAME"]='John'
PERSON["LNAME"]='Andrew'
PERSONS["1"]=${PERSON[@]}
PERSON["FNAME"]='Elen'
PERSON["LNAME"]='Murray'
PERSONS["2"]=${PERSON[@]}
for KEY in "${!PERSONS[@]}"; do
 TMP="${PERSONS["$KEY"]}"
 echo "$KEY - $TMP"
 echo "${TMP["FNAME"]}"
 echo "${TMP["LNAME"]}"
done
Run Code Online (Sandbox Code Playgroud)

输出:

1 - John Andrew
John Andrew
John Andrew
2 - Elen Murray
Elen Murray
Elen Murray
Run Code Online (Sandbox Code Playgroud)

如您所见,在for循环中尝试访问$ TMP数组的特定索引会返回整个数组.

[问]为了分别访问for循环内$ TMP数组的"FNAME"和"LNAME"索引,我需要做什么?

谢谢.

bash hash associative-array hashtable multidimensional-array

17
推荐指数
2
解决办法
4万
查看次数

从PHP关联数组中选择一个随机元素

我在PHP中有一个关联数组,想要从中选择一个随机键/值对.这是我到目前为止所拥有的:

初始化.

$locations = array();
Run Code Online (Sandbox Code Playgroud)

循环访问SQL查询并添加键/值对:

array_push($locations, "'$location_id' => '$location_name'");
Run Code Online (Sandbox Code Playgroud)

稍后,我选择数组的随机索引:

$rand = array_rand($locations);
Run Code Online (Sandbox Code Playgroud)

兰德只是一个数字.所以位置[$ rand]给了我类似的东西:

'1' => 'Location 1'
Run Code Online (Sandbox Code Playgroud)

好的,一个assoc数组元素.此时,我不知道这个assoc数组的关键,所以我尝试了以下几点:

foreach($locations[$rand] as $loc_id => $location_name) { 
    echo "$key : $value<br/>\n";
}

$loc_id, $location_name = each($locations[$rand]);

$location_name = $locations[key($rand)];
Run Code Online (Sandbox Code Playgroud)

这3次尝试都不起作用.他们都抛出错误,如"传递的变量不是一个数组".

我确信有一些简单的1衬里可以从阵列中提取随机键/值对.或者我的语法已关闭.我非常感谢你的帮助.

php random associative-array

17
推荐指数
2
解决办法
2万
查看次数

在不知道单对关联数组中的键的情况下获取值

有一个只有一对的关联数组key=>value.

我不知道这是关键,但我需要得到它的价值:

$array = array('???' => 'value');
$value = // ??
Run Code Online (Sandbox Code Playgroud)

$array[0] 不起作用.

我怎样才能获得它的价值?

php arrays associative-array

17
推荐指数
2
解决办法
2万
查看次数

为什么我不能将字符串键存储在关联数组中?

我是D编程语言的新手,刚开始阅读D编程语言书.

尝试一个关联数组示例代码时遇到错误

#!/usr/bin/rdmd
import std.stdio, std.string;

void main() {
    uint[string] dict;
    foreach (line; stdin.byLine()) {
        foreach (word; splitter(strip(line))) {
            if (word in dict) continue;
            auto newId = dict.length;
            dict[word] = newId;
            writeln(newId, '\t', word);
        }   
    }   
}
Run Code Online (Sandbox Code Playgroud)

DMD显示此错误消息:

./vocab.d(11):错误:关联数组只能用不可变键赋值,而不是char []

我正在使用DMD编译2.051

我猜测关联数组的规则自TDPL书以来已经发生了变化.

我应该如何使用带有字符串键的关联数组?

谢谢.

更新:

我在本书的后半部分找到了解决方案.

在放入数组之前使用string.idup创建重复的不可变值.

所以

dict[word.idup] = newId;
Run Code Online (Sandbox Code Playgroud)

会做的.

但这有效吗?

string associative-array d

16
推荐指数
1
解决办法
2100
查看次数

如何在Bash中重命名关联数组?

我需要循环一个关联数组并将其内容排放到临时数组(并对该值执行一些更新).

然后应该丢弃第一个数组的剩余内容,并且我想将temp数组分配给原始数组变量.

Sudo代码:

declare -A MAINARRAY
declare -A TEMPARRAY
... populate ${MAINARRAY[...]} ...

while something; do     #Drain some values from MAINARRAY to TEMPARRAY
    ${TEMPARRAY["$name"]}=((${MAINARRAY["$name"]} + $somevalue))
done
... other manipulations to TEMPARRAY ...

unset MAINARRAY        #discard left over values that had no update
declare -A MAINARRAY
MAINARRAY=${TEMPARRAY[@]}  #assign updated TEMPARRAY back to MAINARRAY (ERROR HERE)
Run Code Online (Sandbox Code Playgroud)

variables bash associative-array

16
推荐指数
4
解决办法
2万
查看次数

使用非数字键删除数组的所有元素

我有一个看起来像这样的数组:

Array
(
    [0] => apple
    ["b"] => banana
    [3] => cow
    ["wrench"] => duck
)
Run Code Online (Sandbox Code Playgroud)

我想获取该数组并使用array_filter或类似的东西删除带有非数字键的元素并接收以下数组:

Array
(
    [0] => apple
    [3] => cow
)
Run Code Online (Sandbox Code Playgroud)

我正在考虑这个,我想不出办法这样做,因为array_filter不提供我的函数键,而array_walk不能修改数组结构(在PHP手册中谈到).

php arrays associative-array

16
推荐指数
4
解决办法
2万
查看次数