我在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中有没有好的工具/库?我不是在寻找解析器,只是快速有效地做到这一点.
这种不良做法/会导致问题吗?
$_SESSION['stuff to keep']
Run Code Online (Sandbox Code Playgroud)
而不是呼吁str_replace()指数.
我使用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初始化的各种问题/答案,但我仍然有点困惑.我有一系列相关问题:
我可以添加编译器选项-std = c ++ 0x并完成警告,但仍然没有更明智的基础问题.如果我在类别结构中添加方法,事情会不会破裂?
以更符合C++ 03的方式初始化此POD结构(类别)的最佳方法是什么?
基本上,我还不确定以某种方式而不是另一种方式做事的后果.这种关联数组(其中关键是对象的ID)的很容易与PHP,我还在学习正确的方法做它在C++.在上面的代码中是否有任何我应该注意的事项?
编辑
下面的问题是相关的,但是当我第一次看到他们,我不明白的答案:
c + +初始化匿名结构
的C++初始化结构与数组作为成员
用C初始化结构++
我需要一个类似于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)
如何更改代码以使输出"相等"?
我正在尝试创建一个多维关联数组但需要一些帮助.我已经回顾了这个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
我在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衬里可以从阵列中提取随机键/值对.或者我的语法已关闭.我非常感谢你的帮助.
有一个只有一对的关联数组key=>value.
我不知道这是关键,但我需要得到它的价值:
$array = array('???' => 'value');
$value = // ??
Run Code Online (Sandbox Code Playgroud)
$array[0] 不起作用.
我怎样才能获得它的价值?
我是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)
会做的.
但这有效吗?
我需要循环一个关联数组并将其内容排放到临时数组(并对该值执行一些更新).
然后应该丢弃第一个数组的剩余内容,并且我想将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) 我有一个看起来像这样的数组:
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手册中谈到).